From 442447153f4444c800d9d947b6fc5749dd7b944f Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 19 May 2026 20:17:15 +0200 Subject: [PATCH 01/50] Move provider and style docs to webfoundations directory Reorganize auth0-component-provider and universal-components-style under universal-components/webfoundations/. Update navigation, internal links, and add redirects for old URLs. Co-Authored-By: Claude Opus 4.7 --- main/config/redirects.json | 8 ++++++++ .../universal-components-overview.mdx | 10 +++++----- .../{ => webfoundations}/auth0-component-provider.mdx | 6 +++--- .../universal-components-style.mdx | 2 +- 4 files changed, 17 insertions(+), 9 deletions(-) rename main/docs/get-started/universal-components/{ => webfoundations}/auth0-component-provider.mdx (99%) rename main/docs/get-started/universal-components/{ => webfoundations}/universal-components-style.mdx (99%) diff --git a/main/config/redirects.json b/main/config/redirects.json index bc82fbd20c..5cf5e09ffa 100644 --- a/main/config/redirects.json +++ b/main/config/redirects.json @@ -22670,5 +22670,13 @@ { "source": "/docs/manage-users/user-migration/user-import-export-extension", "destination": "/docs/manage-users/user-migration/bulk-user-import-export" + }, + { + "source": "/docs/get-started/universal-components/auth0-component-provider", + "destination": "/docs/get-started/universal-components/webfoundations/auth0-component-provider" + }, + { + "source": "/docs/get-started/universal-components/universal-components-style", + "destination": "/docs/get-started/universal-components/webfoundations/universal-components-style" } ] diff --git a/main/docs/get-started/universal-components/universal-components-overview.mdx b/main/docs/get-started/universal-components/universal-components-overview.mdx index 33d68f094a..bb21dc3a26 100644 --- a/main/docs/get-started/universal-components/universal-components-overview.mdx +++ b/main/docs/get-started/universal-components/universal-components-overview.mdx @@ -138,7 +138,7 @@ Use CSS variables to customize your branding: } ``` -To learn more, read [Style Universal Components](/docs/get-started/universal-components/universal-components-style). +To learn more, read [Style Universal Components](/docs/get-started/universal-components/webfoundations/universal-components-style). @@ -235,7 +235,7 @@ Use CSS variables to customize your branding: } ``` -To learn more, read [Style Universal Components](/docs/get-started/universal-components/universal-components-style). +To learn more, read [Style Universal Components](/docs/get-started/universal-components/webfoundations/universal-components-style). @@ -333,7 +333,7 @@ Use CSS variables to customize your branding: } ``` -To learn more, read [Customize Style and Themes with Universal Components](/docs/get-started/universal-components/universal-components-style). +To learn more, read [Customize Style and Themes with Universal Components](/docs/get-started/universal-components/webfoundations/universal-components-style). @@ -371,5 +371,5 @@ See complete working examples in the sample applications. ## Learn more -- [Configure Auth0ComponentProvider](/docs/get-started/universal-components/auth0-component-provider) -- [Customize Style and Themes with Universal Components](/docs/get-started/universal-components/universal-components-style) +- [Configure Auth0ComponentProvider](/docs/get-started/universal-components/webfoundations/auth0-component-provider) +- [Customize Style and Themes with Universal Components](/docs/get-started/universal-components/webfoundations/universal-components-style) diff --git a/main/docs/get-started/universal-components/auth0-component-provider.mdx b/main/docs/get-started/universal-components/webfoundations/auth0-component-provider.mdx similarity index 99% rename from main/docs/get-started/universal-components/auth0-component-provider.mdx rename to main/docs/get-started/universal-components/webfoundations/auth0-component-provider.mdx index b91e8dc247..533bb2f0a2 100644 --- a/main/docs/get-started/universal-components/auth0-component-provider.mdx +++ b/main/docs/get-started/universal-components/webfoundations/auth0-component-provider.mdx @@ -268,7 +268,7 @@ Use the following properties to align the Universal Components with your applica For detailed styling examples and customization patterns, read the [Customize Style and Themes with Universal - Components](/docs/get-started/universal-components/universal-components-style). + Components](/docs/get-started/universal-components/webfoundations/universal-components-style). --- @@ -773,7 +773,7 @@ Fine-tune TanStack Query caching for every Auth0 component. Defaults keep data f For detailed styling examples and customization patterns, read the [Customize Style and Themes with Universal - Components](/docs/get-started/universal-components/universal-components-style). + Components](/docs/get-started/universal-components/webfoundations/universal-components-style). --- @@ -1211,7 +1211,7 @@ All custom methods are optional. Only implement the ones you need. Methods recei For detailed styling examples and customization patterns, read the [Customize Style and Themes with Universal - Components](/docs/get-started/universal-components/universal-components-style). + Components](/docs/get-started/universal-components/webfoundations/universal-components-style). --- diff --git a/main/docs/get-started/universal-components/universal-components-style.mdx b/main/docs/get-started/universal-components/webfoundations/universal-components-style.mdx similarity index 99% rename from main/docs/get-started/universal-components/universal-components-style.mdx rename to main/docs/get-started/universal-components/webfoundations/universal-components-style.mdx index 4f4d4ca73e..55ec856491 100644 --- a/main/docs/get-started/universal-components/universal-components-style.mdx +++ b/main/docs/get-started/universal-components/webfoundations/universal-components-style.mdx @@ -11,7 +11,7 @@ sidebarTitle: Customize Style and Themes Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). -Auth0 Universal Components are built on a flexible design system utilizes [Tailwind CSS](https://tailwindcss.com/docs/installation/using-vite) and [Radix UI primitives](https://www.radix-ui.com/primitives/docs/overview/introduction). Styling is orchestrated through the [`Auth0ComponentProvider`](/docs/get-started/universal-components/auth0-component-provider) to allow you to choose between high-level presets or fine-grained CSS variable overrides. +Auth0 Universal Components are built on a flexible design system utilizes [Tailwind CSS](https://tailwindcss.com/docs/installation/using-vite) and [Radix UI primitives](https://www.radix-ui.com/primitives/docs/overview/introduction). Styling is orchestrated through the [`Auth0ComponentProvider`](/docs/get-started/universal-components/webfoundations/auth0-component-provider) to allow you to choose between high-level presets or fine-grained CSS variable overrides. This architecture ensures that your identity flows look and feel like native parts of your application. From d81d66822a576f9edd55ad2577b38f0e5c27ec4a Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 19 May 2026 23:42:24 +0200 Subject: [PATCH 02/50] Add universal components for native apps docs --- .../native-foundations/native-overview.mdx | 181 ++++ .../native-foundations/native-theming.mdx | 792 ++++++++++++++++++ 2 files changed, 973 insertions(+) create mode 100644 main/docs/get-started/universal-components/native-foundations/native-overview.mdx create mode 100644 main/docs/get-started/universal-components/native-foundations/native-theming.mdx diff --git a/main/docs/get-started/universal-components/native-foundations/native-overview.mdx b/main/docs/get-started/universal-components/native-foundations/native-overview.mdx new file mode 100644 index 0000000000..2cec9cb76d --- /dev/null +++ b/main/docs/get-started/universal-components/native-foundations/native-overview.mdx @@ -0,0 +1,181 @@ +--- +title: Auth0 Universal Components for Native Applications +description: Learn how to install and configure Auth0 Universal Components for Native Applications +sidebarTitle: Configure Universal Components for Native Applications +--- + +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + + + +Auth0 Universal Components for [Native Applications](/docs/get-started/auth0-overview/create-applications/native-apps#register-native-applications) ships pre-built, embeddable UI for identity flows using iOS ([SwiftUI](https://developer.apple.com/swiftui)) and Android ([Jetpack Compose](https://developer.android.com/compose)). + +## Prerequisites + +To use Auth0 Universal Components for Native Applications: + +For iOS implementations: + +* Supported OS: **iOS 16.0+**, **macOS 13.0+**, **visionOS 1.0+**. +* Recommended Language: **Swift 5+** (6 Preferred), **Xcode 16+**. + + +Auth0 [Passkeys](/docs/authenticate/database-connections/passkeys) support requires **iOS 16.6+, macOS 13.5+,** or **visionOS 1.0+** for Apple platforms, and **Android 14+** for Android devices. The base SDK supports Android 11+ (API 30); Passkeys specifically require Android 14+. + + +## Install the SDK + + + + +The iOS SDK is distributed as [`Auth0UniversalComponents`](/docs/get-started/universal-components/universal-components-overview). +Auth0 recommends using the Swift Package Manager installer. + +### Swift Package Manager + +1. Use Xcode, select **File → Add Package Dependencies** and enter: + + ```text + https://github.com/auth0/ui-components-ios.git + ``` + +2. Select version `1.0.0-beta.0` or later, then add `Auth0UniversalComponents` to your application target. + +### CocoaPods + +1. Add the pod to your Podfile: + + ```ruby + pod 'Auth0UniversalComponents', '~> 1.0.0' + ``` +2. Then run: + + ```bash + pod install + ``` + + +**Known issue**: The 1.0.0 CocoaPods release omits bundled Media, Colors, and Fonts resources. If your UI renders without the expected styling, use the Swift Package Manager until the next podspec release. + + +### Carthage + +1. Add the following to your Cartfile: + + ```text + github "auth0/ui-components-ios" ~> 1.0.0 + ``` + +2. Then run: + + ```bash + carthage update --use-xcframeworks + ``` + +### Verify the installation + +Import the module in a Swift file to confirm the framework resolves: + + ```swift + import Auth0UniversalComponents + ``` + +### Sample application + +You can review the sample application `AppUIComponents` target in the [ui-components-ios gitHub repo](https://github.com/auth0/ui-components-ios) for a reference implementation. It includes `AppUIComponentsApp.swift` for SDK initialization and `Common/ThemeManager.swift` for runtime theme switching. + + + + + +The Android SDK is distributed through the [Maven Central](https://mvnrepository.com/artifact/com.auth0) repository as `com.auth0.universalcomponents:universal-components`. + +### Gradle + +1. Add the `mavencentral()` repository if it is not listed in your `settings.gradle` or `settings.gradle.kts` file: + + ```kotlin + dependencyResolutionManagement { + repositories { + mavenCentral() + google() + } + } + ``` + +2. Add the dependency to your module-level `build.gradle` or `build.gradle.kts`: + + ```kotlin + dependencies { + implementation 'com.auth0.universalcomponents:universal-components:1.0.0-beta.0' + } + ``` + +### Minimum supported versions + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
RequirementVersion
Android minSdk30 (Android 11)
Kotlin2.2+
Android Gradle Plugin8.11+
Jetpack Compose BOM2024.09.00+
Auth0 Android SDK3.14.0 (resolved transitively)
JDK17+
+ + +Auth0 recommends using [**Auth0.Android v3+**](https://github.com/auth0/Auth0.Android) toolkit in your application to avoid compilation errors. + + + +### Configure Compose + +Ensure [Compose](https://developer.android.com/develop/ui/compose/setup-compose-dependencies-and-compiler#setup-compose-dependencies) is enabled in your application's `build.gradle` file: + + ```kotlin + android { + buildFeatures { + compose = true + } + } + ``` + +### Sample application +You can review the sample application in the Auth0 [ui-components-android gitHub repo](https://github.com/auth0/ui-components-android#documentation) for a reference implementation. It includes `MainActivity.kt` for Auth0 SDK setup and SDK initialization and `LoginSecurityScreen.kt` for renders of the `AuthenticatorSettingsComponent`. + +
+
+ +Once the SDK is installed, you can continue to [Build a Self-Service Account Security Interface] to wire authentication and render the `auth-methods` management UI. + +## Next steps +Customize style and themes: Override colors, typography, spacing, radius, and size tokens using the Auth0 design-token system. +Build a Self-Service Account Security Interface: Prepare your Auth0 tenant, initialize the SDK, and render the auth-methods management UI. \ No newline at end of file diff --git a/main/docs/get-started/universal-components/native-foundations/native-theming.mdx b/main/docs/get-started/universal-components/native-foundations/native-theming.mdx new file mode 100644 index 0000000000..2df663d542 --- /dev/null +++ b/main/docs/get-started/universal-components/native-foundations/native-theming.mdx @@ -0,0 +1,792 @@ +--- +title: Customize Style and Themes Universal Components for Native Applications +description: Learn how to customize style and themes for universal components for native applications. +sidebarTitle: Customize Style and Themes +--- + +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + + +The native Universal Components SDKs share a design token model. Every visual property, such as colors, typography, spacing, corner radii, and component sizes are expressed as a named `token` where you can override one value without rewriting layouts. +The default theme renders the standard Auth0 style without any configuration, you only need to supply your own theme to match your brand. + +## Customize style and themes + + + + +The [iOS SDK](https://github.com/auth0/ui-components-ios) uses a SwiftUI `@Environment` based theme. You can wrap any SDK view using the `.auth0Theme(_:)`, so that every component using that modifier renders the injected `Auth0Theme` automatically. + +### Zero configuration + +If you do not configure a theme, the iOS SDK renders the default Auth0 default theme: + +```swift +import SwiftUI +import Auth0UniversalComponents + +struct ContentView: View { + var body: some View { + MyAccountAuthMethodsView() + } +} +``` + +### Override a subset of tokens + +You can select which tokens to override, the iOS SDK will render every other token using the Auth0 default theme. + + +```swift +import SwiftUI +import Auth0UniversalComponents + +struct ContentView: View { + var body: some View { + MyAccountAuthMethodsView() + .auth0Theme( + Auth0Theme( + colors: DefaultAuth0ColorTokens( + background: DefaultAuth0BackgroundColorTokens(primary: Color("BrandBlue")), + text: DefaultAuth0TextColorTokens(onPrimary: .white) + ) + ) + ) + } +} +``` + +The same shape applies to typography, spacing, radius, and sizes. For example: + +```swift +Auth0Theme( + typography: DefaultAuth0TypographyTokens( + body: Auth0TextStyle(font: .custom("Lato-Regular", size: 17), tracking: 0, lineSpacing: 7), + label: Auth0TextStyle(font: .custom("Lato-Medium", size: 16), tracking: 0.1, lineSpacing: 5) + ), + radius: DefaultAuth0RadiusTokens(button: 24) +) +``` + +### Configure a full brand theme + +You can configure for full brand alignment, by providing your own brand theme that implements the three color category protocols and wire them into an `Auth0ColorTokens` container: + +```swift +struct BrandBackground: Auth0BackgroundColorTokens { + var primary: Color { Color("Background/Primary", bundle: .main) } + var primarySubtle: Color { Color("Background/Primary", bundle: .main).opacity(0.35) } + var inverse: Color { Color("Background/Inverse", bundle: .main) } + var accent: Color { Color("Background/Accent", bundle: .main) } + var layerTop: Color { Color("Background/LayerTop", bundle: .main) } + var layerMedium: Color { Color("Background/LayerMedium", bundle: .main) } + var layerBase: Color { Color("Background/LayerBase", bundle: .main) } + var error: Color { Color("Background/Error", bundle: .main) } + var errorSubtle: Color { Color("Background/ErrorSubtle", bundle: .main) } + var success: Color { Color("Background/Success", bundle: .main) } + var successSubtle: Color { Color("Background/SuccessSubtle", bundle: .main) } +} + +struct BrandColors: Auth0ColorTokens { + var background: any Auth0BackgroundColorTokens { BrandBackground() } + var text: any Auth0TextColorTokens { DefaultAuth0TextColorTokens() } + var border: any Auth0BorderColorTokens { DefaultAuth0BorderColorTokens() } +} + +MyAccountAuthMethodsView() + .auth0Theme(Auth0Theme(colors: BrandColors())) +``` + +### Read the theme in your own views + +Use `@Environment(\.auth0Theme)` to consume the same tokens in any view you build alongside the SDK: + +```swift +struct MyCustomStep: View { + @Environment(\.auth0Theme) private var theme + + var body: some View { + VStack(spacing: theme.spacing.md) { + Text("Almost there!") + .auth0TextStyle(theme.typography.titleLarge) + .foregroundStyle(theme.colors.text.bold) + + Button("Continue") { /* ... */ } + .frame(height: theme.sizes.buttonHeight) + .background(theme.colors.background.primary) + .cornerRadius(theme.radius.button) + } + .padding(theme.spacing.md) + } +} +``` + +### Token reference + +#### Auth0ColorTokens + +Colors are split across three focused protocols, `Auth0BackgroundColorTokens`, `Auth0TextColorTokens`, and `Auth0BorderColorTokens` and aggregated into `Auth0ColorTokens`. +All color assets are adaptive, so light and dark modes are handled automatically by the asset catalog. + +#### Background primary + + + + + + + + + + + + + + + + + + + + + + + + +
TokenUsage
`background.primary`CTA button background, primary borders
`background.primarySubtle`Low-emphasis primary background
`background.inverse`Contrast-flipped background
`background.accent`Branded or featured UI highlight
+ +#### Background layers + + + + + + + + + + + + + + + + + + + + +
TokenUsage
`background.layerTop`Overlays and modals
`background.layerMedium`Cards and raised containers
`background.layerBase`Main app background
+ +#### Background feedback + + + + + + + + + + + + + + + + + + + + + + + + +
TokenUsage
`background.error`Error state container
`background.errorSubtle`Subtle error banner
`background.success`Success state container
`background.successSubtle`Subtle success banner
+ +#### Text content + + + + + + + + + + + + + + + + + + + + +
TokenUsage
`text.bold`Headings and primary body text
`text.regular`Secondary copy, descriptions, captions
`text.disabled`Disabled and placeholder text
+ +#### Text on color surfaces + + + + + + + + + + + + + + + + + + + + +
TokenUsage
`text.onPrimary`Text and icons on `background.primary`
`text.onSuccess`Text and icons on `background.success`
`text.onError`Text and icons on `background.error`, validation messages
+ +#### Border + + + + + + + + + + + + + + + + + + + + + + + + +
TokenUsage
`border.bold`High-contrast or selected borders
`border.regular`Input field and card borders
`border.subtle`Delicate dividers
`border.shadow`Elevation shadow border
+ +#### Typography Auth0TypographyTokens + +Each token is an `Auth0TextStyle` bundling `font`, `tracking`, and `lineSpacing`. You can apply them using the `.auth0TextStyle(_:)` view modifier. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TokenTypefaceSizeWeightLine heightTrackingUsage
`displayLarge`Inter34 ptSemiBold41 pt−0.20 ptHero headings, passkey enrollment
`displayMedium`Inter28 ptSemiBold34 pt−0.10 ptMajor screen titles, error headings
`display`Inter22 ptSemiBold28 pt−0.05 ptSection-level headings
`titleLarge`Inter20 ptSemiBold25 pt0 ptScreen titles, subheading cards
`title`Inter17 ptSemiBold24 pt0 ptIn-content titles
`body`Inter17 ptRegular24 pt0 ptDescriptions, body copy
`bodySmall`Inter15 ptRegular20 pt+0.10 ptSecondary body copy, footnotes
`label`Inter16 ptMedium21 pt+0.10 ptButton labels, form field labels
`helper`Inter13 ptRegular18 pt+0.20 ptCaptions, helper text
`overline`Inter11 ptRegular16 pt+0.77 ptOverline and category labels
+ + +If typeface `Inter` is not bundled in the host app, SwiftUI uses the `SF Pro` typeface automatically. + + +#### Spacing Auth0SpacingTokens + +Defaults to 4 pt grid. Use the token name in design hand-offs, not the raw pixel value. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TokenDefaultDescription
`xxs`4 ptMinimal gap between tightly coupled elements
`xs`8 ptSmall gap between grouped elements
`sm`12 ptMedium internal padding
`md`16 ptStandard component and container padding
`lg`24 ptLarger padding for major sections
`xl`32 ptExtra-large padding
`xxl`48 ptDouble-extra-large padding
`xxxl`56 ptTriple-extra-large padding
+ +#### Radius Auth0RadiusTokens + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TokenDefaultUsage
`small`8 ptSingle character-input cells (OTP, PIN digits)
`medium`12 ptBanner and feedback cards
`inputField`14 ptText inputs, code display containers
`button`16 ptCTA buttons, auth-method cards
`pill`24 ptPill-shaped outline buttons
+ +#### Sizes Auth0SizeTokens + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TokenDefaultUsage
buttonHeight48 ptAll primary and secondary action buttons
inputHeight60 ptText and phone-number input fields
size4xlDimen48 ptWidth of a single character-input cell
size5xlDimen56 ptHeight of a single character-input cell
containerSizeLargeDimen52 ptHeight of a read-only code display container
iconSmall16 ptSmall icons — chevrons, info indicators, checkmarks
iconMedium24 ptStandard icons — authentication-method images
iconLarge28 ptLarge icons — three-dots menu
+ +
+ + + +The [Android SDK](https://github.com/auth0/ui-components-android) uses a Jetpack Compose theme that mirrors Material 3's MaterialTheme pattern. +You can wrap SDK content using `Auth0Theme { ... }` to provide tokens, or pass `themeConfiguration` directly to `AuthenticatorSettingsComponent`. + +You can read tokens inside any composable with `Auth0Theme.colors`, `Auth0Theme.typography`, `Auth0Theme.shapes`, `Auth0Theme.dimensions`, and `Auth0Theme.sizes`. + +### Zero configuration + +If you do not configure a theme, the Android SDK renders the default Auth0 default theme: + +```kotlin +@Composable +fun MFASettingsScreen() { + AuthenticatorSettingsComponent() +} +``` + +### Override a subset of tokens + +You can select which tokens to override using the `Auth0Color.light().copy(...)`, `Auth0Color.dark()`, or `Auth0Typography.default().copy(...)` tokens. + +```kotlin +@Composable +fun MFASettingsScreen() { + AuthenticatorSettingsComponent( + themeConfiguration = Auth0ThemeConfiguration( + color = Auth0Color.light().copy( + backgroundPrimary = Color(0xFFFF6B00), + textOnPrimary = Color.White + ) + ) + ) +} +``` + +### Force dark mode + +To force dark mode, you can wrap the component in `Auth0Theme(darkTheme = true)` or pass the dark color scheme explicitly: + +```kotlin +// Option 1: Force dark mode via Auth0Theme +@Composable +fun MFASettingsScreen() { + Auth0Theme(darkTheme = true) { + AuthenticatorSettingsComponent() + } +} + +// Option 2: Explicit dark color scheme +@Composable +fun MFASettingsScreen() { + AuthenticatorSettingsComponent( + themeConfiguration = Auth0ThemeConfiguration( + color = Auth0Color.dark() + ) + ) +} +``` + +### Configure a full brand theme + +You can configure for full brand alignment by combining colors, typography, and shapes for complete brand control using `Auth0ThemeConfiguration()` : + +```kotlin +fun MFASettingsScreen() { + AuthenticatorSettingsComponent( + themeConfiguration = Auth0ThemeConfiguration( + color = Auth0Color.light().copy( + backgroundPrimary = Color(0xFF0066CC), + textOnPrimary = Color.White, + backgroundLayerBase = Color(0xFFF5F5F5), + backgroundLayerMedium = Color.White, + textBold = Color(0xFF1F1F1F), + textDefault = Color(0xFF636363), + backgroundError = Color(0xFFFF4444), + backgroundSuccess = Color(0xFF00CC66), + borderDefault = Color(0xFFE0E0E0) + ), + typography = Auth0Typography.default().copy( + displayMedium = TextStyle(fontSize = 22.sp, fontWeight = FontWeight.Bold), + body = TextStyle(fontSize = 18.sp) + ), + shapes = Auth0Shapes( + none = RoundedCornerShape(0.dp), + extraSmall = RoundedCornerShape(4.dp), + small = RoundedCornerShape(8.dp), + medium = RoundedCornerShape(12.dp), + large = RoundedCornerShape(16.dp), + extraLarge = RoundedCornerShape(24.dp), + full = RoundedCornerShape(100.dp) + ) + ) + ) +} +``` + +### Read theme tokens in your own composables + +You can read theme tokens in an `Auth0Theme{ ... }` composable using the accessor object: + +```kotlin +@Composable +fun CustomAuthCard() { + Card( + shape = Auth0Theme.shapes.medium, + colors = CardDefaults.cardColors( + containerColor = Auth0Theme.colors.backgroundLayerMedium + ) + ) { + Column(modifier = Modifier.padding(Auth0Theme.dimensions.spacingMd)) { + Text( + text = "Authenticator", + style = Auth0Theme.typography.title, + color = Auth0Theme.colors.textBold + ) + Text( + text = "Enabled", + style = Auth0Theme.typography.bodySmall, + color = Auth0Theme.colors.textDefault + ) + } + } +} +``` + +### Switch themes at runtime + +You can keep the theme configuration in state to swap between light and dark (or brand variants) without recreating the screen: + +```kotlin +@Composable +fun MFASettingsScreen() { + var isDarkMode by remember { mutableStateOf(false) } + + val themeConfig = Auth0ThemeConfiguration( + color = if (isDarkMode) Auth0Color.dark() else Auth0Color.light() + ) + + Column { + Switch(checked = isDarkMode, onCheckedChange = { isDarkMode = it }) + AuthenticatorSettingsComponent(themeConfiguration = themeConfig) + } +} +``` + +### Token reference + +#### Colors Auth0Color + +Use `Auth0Color.light()` and `Auth0Color.dark()` factories as starting points and `.copy(...)` to override specific tokens. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TokenUsage
`backgroundPrimary`, `backgroundPrimarySubtle`, `backgroundInverse`, `backgroundAccent`CTA and accent surfaces
`backgroundLayerTop`, `backgroundLayerMedium`, `backgroundLayerBase`Overlay / card / app-background layers
`backgroundError`, `backgroundErrorSubtle`, `backgroundSuccess`, `backgroundSuccessSubtle`Feedback surfaces
`borderBold`, `borderDefault`, `borderSubtle`, `borderShadow`Emphasis and elevation borders
`textBold`, `textDefault`, `textSubtle`Heading / body / caption text
`textOnPrimary`, `textOnInverse`, `textError`, `textSuccess`, `textAccent`Text on colored surfaces
+ +#### Typography Auth0Typography + +Every token is a compose `TextStyle`. You can override it with `Auth0Typography.default().copy(...)`. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TokenUsage
`displayMedium`, `display`Hero / major screen headings
`titleLarge`, `title`Screen titles, in-content titles
`body`, `bodySmall`Descriptions, body copy, footnotes
`label`Button labels, form field labels
`helper`, `overline`Captions, helper text, category labels
+ +#### Shapes Auth0Shapes + + + + + + + + + + + + + + + + + + + + +
TokenUsage
`none`No rounding
`extraSmall`, `small`, `medium`, `large`, `extraLarge`Standard rounding scale
`full`Fully rounded (pill)
+ +#### Dimensions Auth0Dimensions + +You can use `Auth0Theme.dimensions.*` to configure spacing values on a 4 dp grid: `spacingXxs`, `spacingXs`, `spacingSm`, `spacingMd`, `spacingLg`, `spacingXl`, `spacingXxl`, `spacingXxxl`. + +#### Sizes Auth0Sizes + +You can use `Auth0Theme.sizes.*` to configure component dimensions: `buttonHeight`, `inputHeight`, icon sizes, OTP cell dimensions. + +
+ +
From d487b51287ceb17fa6ee6e3456fec2f632b96aa4 Mon Sep 17 00:00:00 2001 From: Carlos Date: Wed, 20 May 2026 12:28:31 +0200 Subject: [PATCH 03/50] Add My Account docs and fix typos across native UC pages Adds my-account-overview, auth-methods-management, and factors/passkeys docs. Fixes broken link, typos (Applicatiosn, everages, SKD, pagckage), duplicate step numbering, indented fences, and heading inconsistencies in native-foundations and my-account pages. Co-Authored-By: Claude Opus 4.7 --- .../my-account/auth-methods-management.mdx | 300 ++++++++++++++++++ .../my-account/factors/passkeys.mdx | 164 ++++++++++ .../my-account/my-account-overview.mdx | 293 +++++++++++++++++ .../native-foundations/native-overview.mdx | 42 ++- .../native-foundations/native-theming.mdx | 72 +++-- 5 files changed, 834 insertions(+), 37 deletions(-) create mode 100644 main/docs/get-started/universal-components/my-account/auth-methods-management.mdx create mode 100644 main/docs/get-started/universal-components/my-account/factors/passkeys.mdx create mode 100644 main/docs/get-started/universal-components/my-account/my-account-overview.mdx diff --git a/main/docs/get-started/universal-components/my-account/auth-methods-management.mdx b/main/docs/get-started/universal-components/my-account/auth-methods-management.mdx new file mode 100644 index 0000000000..20e0cd2d96 --- /dev/null +++ b/main/docs/get-started/universal-components/my-account/auth-methods-management.mdx @@ -0,0 +1,300 @@ +--- +title: Auth Methods Management +description: Render a full-screen UI that lets users enroll, review, and remove MFA factors, passkeys, and recovery codes using the Auth0 My Account API. +sidebarTitle: Auth Methods Management +--- + +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + + +The Auth Methods Management component renders a complete UI for managing a user's authentication methods. +It ships as `MyAccountAuthMethodsView` on iOS and `AuthenticatorSettingsComponent` on Android, both are views that handle every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). You do not need to orchestrate navigation, call endpoints, or manage state. + +## Setup requirements + + +Before rendering this component, follow [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/my-account/build-account-security) to install the SDK, configure your Auth0 tenant, and initialize the SDK with a token provider. +The component reads its configuration, token provider, and passkey settings from the initialized SDK singleton. + + +## Supported factors + +The component handles every factor Auth0 supports through the My Account API. Each factor's screens inherit the component's active theme, read [Customize Style and Themes](/docs/get-started/universal-components/native/native-theming) for the full token catalog. + +Enable the factors you want on the Auth0 tenant; the component automatically shows and hides factors based on what the tenant exposes. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FactorWhat the component rendersSDK notes
Email OTPEmail input → 6-digit OTP verificationPlatform OTP autofill (iOS QuickType, Android keyboard autofill) works against the OTP field.
SMS OTPCountry-code picker + phone entry → 6-digit OTP verificationAndroid SMS Retriever API is not used; the SMS body has no app hash. Autofill via the system keyboard works normally.
TOTP (Authenticator app)QR code with manual-entry key → 6-digit OTP verificationRenders the standard otpauth:// payload; no custom brand logo injection into the QR.
Push notificationsQR code for Auth0 Guardian scan → "waiting for approval" stateEnd users need the public Auth0 Guardian app. Enterprise customers with a branded Guardian SDK build must surface their own install link outside the component.
PasskeysEducational screen → OS biometric prompt → enrolled entry in the listRequires Apple Associated Domains (iOS 16.6+) or Digital Asset Links (Android 14+). See the dedicated page for app-side platform setup.
Recovery codesDisplay-once code list with copy action + "I've saved my codes" confirmationCodes are displayed to the user and never returned to the caller. Copy-to-clipboard uses the platform's standard clipboard API.
+ + + + +### Getting started + +Place the `MyAccountAuthMethodsView()` component anywhere in your SwiftUI hierarchy, typically behind a settings navigation link. + +```swift SettingsView.swift +import SwiftUI +import Auth0UniversalComponents + +struct SettingsView: View { + var body: some View { + NavigationStack { + List { + NavigationLink(destination: MyAccountAuthMethodsView()) { + Label("Authentication Methods", systemImage: "lock.shield") + } + } + .navigationTitle("Account Settings") + } + } +} +``` + +The view takes no initializer parameters. All customization happens through SwiftUI view modifiers and environment values. + +### Parameters + +The `MyAccountAuthMethodsView` component has a no-argument initializer. Its behavior is customized through view modifiers and environment values. + + + + + + + + + + + + + + + + + + + + + + + + +
Modifier / environmentTypePurpose
`.auth0Theme(_:)``Auth0Theme`Override design tokens — colors, typography, spacing, radius, sizes. To learn about token references, read Customize Style and Themes.
`.embeddedInNavigationStack()`Mark the view as embedded in a host `NavigationStack` so the SDK pushes onto your stack instead of creating its own.
`\.hostNavigationPath``Binding<NavigationPath>`Environment binding the SDK uses to push destinations onto the host navigation stack. Required when you call .embeddedInNavigationStack().
+ +### Customization +Theming is applied to the component as a whole; individual factor screens inherit the active theme. + +Pass a custom `Auth0Theme` to override design tokens across every screen the component renders. + +```swift +MyAccountAuthMethodsView() + .auth0Theme( + Auth0Theme( + colors: DefaultAuth0ColorTokens( + background: DefaultAuth0BackgroundColorTokens(primary: Color("BrandBlue")), + text: DefaultAuth0TextColorTokens(onPrimary: .white) + ) + ) + ) +``` +For the full token catalog and dark-mode patterns, read [Customize Style and Themes](/docs/get-started/universal-components/native/native-theming). + +### Advanced Embed in a host NavigationStack + +By default the `MyAccountAuthMethodsView` component manages its own `NavigationStack`. + +If your application already owns a navigation stack, nesting a second stack breaks back-button behavior and swipe-to-go-back gestures. Auth0 recommends to embed the `MyAccountAuthMethodsView` component into your stack instead. + +```swift +import SwiftUI +import Auth0UniversalComponents + +struct AccountScreen: View { + @State private var path = NavigationPath() + + var body: some View { + NavigationStack(path: $path) { + List { + NavigationLink("Authentication methods", value: "auth-methods") + } + .navigationDestination(for: String.self) { value in + if value == "auth-methods" { + MyAccountAuthMethodsView() + .embeddedInNavigationStack() + } + } + } + .environment(\.hostNavigationPath, $path) + } +} +``` + +There are two requirements when using embedded mode: + +1. Apply `.embeddedInNavigationStack()` to `MyAccountAuthMethodsView` so it skips creating an inner stack. + +2. Add `\.hostNavigationPath` on the outer `NavigationStack` so the SDK knows which path binding to push onto. + + +The SDK also exposes a `Router` helper class for applications that want a type-safe navigation controller for their own routes. It is not required to drive the SDK's internal navigation only use it if you want to apply the same pattern to your application's screens. + + +### Localization + +The iOS SDK does not currently ship localized strings. User facing copy is presented in English. If localization is a blocker for your integration, file a feature request against the [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) SDK. + +
+ + + +### Getting started + +Use the `AuthenticatorSettingsComponent()` from any composable. The SDK handles all internal navigation between enrollment, verification, and management screens. + +```kotlin LoginSecurityScreen.kt +import androidx.compose.runtime.Composable +import com.auth0.universalcomponents.presentation.ui.mfa.AuthenticatorSettingsComponent + +@Composable +fun LoginSecurityScreen() { + AuthenticatorSettingsComponent() +} +``` + +### Parameters + + + + + + + + + + + + + + + + + + + + + + +
ParameterTypeDefaultPurpose
modifierModifierModifierStandard Compose modifier.
themeConfigurationAuth0ThemeConfigurationAuth0ThemeConfiguration.DefaultOverride design tokens — colors, typography, shapes, dimensions, sizes. See Customize Style and Themes.
+ +### Customization + +Theming is applied to the component as a whole; individual factor screens inherit the active theme. + +Use a custom `Auth0ThemeConfiguration` to override design tokens across every screen the component renders. + +```kotlin +AuthenticatorSettingsComponent( + themeConfiguration = Auth0ThemeConfiguration( + color = Auth0Color.light().copy( + backgroundPrimary = Color(0xFF0066CC), + textOnPrimary = Color.White + ) + ) +) +``` + +For the full token catalog and dark-mode patterns, read [Customize Style and Themes](/docs/get-started/universal-components/native/native-theming). + +### Advanced compose NavHost integration + +The `AuthenticatorSettingsComponent` participates in Compose's `NavHost` when present and does not need special wiring. Use it as any other composable, if it is a destination in your `NavHost`, back-navigation defers to the host's `NavController`. + +```kotlin +@Composable +fun AccountNavGraph(navController: NavHostController) { + NavHost(navController, startDestination = "settings") { + composable("settings") { SettingsScreen(navController) } + composable("auth-methods") { AuthenticatorSettingsComponent() } + } +} +``` + +Internally, the SDK manages its own nested navigation between enrollment, verification, and management screens. That internal graph is isolated from your application's `NavController`, so no naming collisions can occur. + +### Localization + +All user facing strings live in the SDK's `values/strings.xml` file. You can override any string in your application by redefining the same key in your own `values/strings.xml` file: + +```text + + Next + +``` + +Your resource value shadows the SDK default at build time. +To ship localized copies, you can provide translated `values-/strings.xml` files that use the same keys. + +
+
+ +## Limitations + +* **No standalone factor components on iOS**. Every factor renders inside the Auth Methods Management component. There is no public API to enroll, verify, or remove a single factor from a different part of your application. +* **No standalone list/remove components**. Neither SDK ships public components for listing enrolled factors or removing them outside the component. Use the Auth methods component for the full management experience. +* **Post-login passkey prompts are not supported**. Prompting a user to save a passkey immediately after sign-in (separate from the settings screen) is not covered by this SDK today. You can track [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) and [universal-components-android](https://github.com/auth0/universal-components-android/issues) for updates. + +## Learn more + + + + + Initialize the SDK and wire the token provider to your Auth0 tenant. + + + + Override colors, typography, spacing, radius, and size tokens using the Auth0 design-token system. + + + \ No newline at end of file diff --git a/main/docs/get-started/universal-components/my-account/factors/passkeys.mdx b/main/docs/get-started/universal-components/my-account/factors/passkeys.mdx new file mode 100644 index 0000000000..1c06ff5433 --- /dev/null +++ b/main/docs/get-started/universal-components/my-account/factors/passkeys.mdx @@ -0,0 +1,164 @@ +--- +title: Passkeys +description: SDK-specific behavior, app-side entitlements, and customization for the Passkey factor rendered inside the Auth Methods Management component. +sidebarTitle: Passkeys +--- + +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + + +The [Auth Methods Management](/docs/get-started/universal-components/my-account/auth-methods-management) component renders the [Passkey](/docs/authenticate/database-connections/passkeys) enrollment flow, an educational screen, a WebAuthn registration handshake with the platform authenticator, and the enrolled-factor entry in the authenticator list. + +Unlike other factors, passkeys require application-side platform entitlements that the SDK cannot configure. This page covers the platform entitlements and SDK configuration specific to passkeys. + +## Prerequisites + +1. **Enable passkeys on your Auth0 database connection** + + Read [Passkeys](/docs/authenticate/database-connections/passkeys) to enable it in your Auth0 tenant. + +2. **Complete the Universal Components setup** + + Read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/my-account/build-account-security) to install the SDK, configure your Auth0 tenant, and initialize the SDK. Set `PasskeysConfiguration` (iOS) or `PasskeyConfiguration` (Android) on the SDK initializer if your integration needs a specific connection or linked identity. + +3. **Complete the platform level application setup** + + Unlike other factors, passkeys requires your application to prove ownership of the Auth0 domain at the OS level. Follow the [Platform setup](#platform-setup) steps to configure. + +## Platform setup + +Passkeys bind to the relying party domain Auth0 issues credentials for, typically your Auth0 tenant domain or [custom domain](/docs/customize/custom-domains). The platform verifies this binding through Apple Associated Domains (iOS) or Android Digital Asset Links. + + + + + +1. **Add the Associated Domains entitlement** + + In **Xcode**, open your target’s **Signing & Capabilities** and add **Associated Domains**. Add the entry: + + ```text + webcredentials:YOUR_AUTH0_DOMAIN + ``` + + For example: `webcredentials:your-tenant.auth0.com`. If you use a custom domain, use that instead. + +2. **Register your application bundle ID in the Auth0 Dashboard** + + A. Navigate to **Auth0 Dashboard → Authentication → Database** + B. Select the **Database Connections** + C. Select the **Passkey settings** tab + D. Add your application bundle ID in the **Allowed iOS Applications** + + Auth0 publishes the `apple-app-site-association` file at `/.well-known/apple-app-site-association` on your domain automatically and includes every registered bundle ID. + +3. **Minimum iOS version** + + The Auth Methods Management component hides the Passkey option on devices running **iOS < 16.6**, **macOS < 13.5**, or **visionOS < 1.0**. + + +Apple’s [Supporting associated domains](https://developer.apple.com/documentation/xcode/supporting-associated-domains) guide is the authoritative reference for entitlements and the AASA file. Validate your AASA with the [AASA Validator](https://app-site-association.cdn-apple.com/) before testing on-device. + + + + + + +1. **Confirm AndroidX Credentials is resolved** + + The Universal Components SDK depends on `androidx.credentials:credentials:1.5.0+` transitively. If you see credential manager errors, verify with `./gradlew app:dependencies`. + +2. **Register your application package and SHA-256 signing fingerprints in the Auth0 Dashboard** + + A. Navigate to **Auth0 Dashboard → Authentication → Database** + B. Select the **Database Connections** + C. Select the **Passkey settings** tab + D. Add your application package and SHA-256 signing fingerprints in the **Allowed Android Applications** + + Auth0 serves `/.well-known/assetlinks.json` on your domain automatically and includes every registered app. + + Obtain fingerprints with: + + ```bash + keytool -list -v -keystore /path/to/keystore -alias YOUR_ALIAS | grep SHA256 + ``` + For Play App Signing, copy the fingerprint from **Play Console → Setup → App signing**. + +3. **Minimum Android version** + + Platform-credential passkeys require **Android 14+ (API 34+)** for the full Credential Manager experience. + On **Android 9–13 (API 28–33)**, passkeys sync through Google Password Manager on devices with up-to-date Play Services. + The component hides the Passkey option for **Android API 28** and below. + + +Google’s [Credential Manager](https://developer.android.com/identity/sign-in/credential-manager) guide and the [Digital Asset Links tester](https://developers.google.com/digital-asset-links/tools/generator) are the authoritative references. Validate your `assetlinks.json` before testing on-device. + + + + + + + +## Customization + +The Passkey educational and status screens inherit the component’s active theme. The biometric prompt itself is rendered by the OS and cannot be themed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TokenEffect on Passkey screens
`background.accent` / `backgroundAccent`Accent color for the passkey educational illustration
`background.primary` / `backgroundPrimary`Add Passkey button background
`text.onPrimary` / `textOnPrimary`Add Passkey button label
`text.bold` / `textBold`Headline and explainer copy
`radius.button` / `shapes.large`Button corner radius
+ +For the full token, read [Customize Style and Themes](/docs/get-started/universal-components/native/native-theming). + +### SDK Limitations + +* **Passkeys can only be enrolled from inside the Auth Methods Management component**. There is no public SwiftUI or Composable API to trigger a standalone passkey enrollment from elsewhere in your app. Post-login "save a passkey" upsell prompts are not supported today. You can track [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) and [universal-components-android](https://github.com/auth0/universal-components-android/issues) for updates. + +* **Removing a passkey in the component does not purge the OS credential store**. The enrolled passkey detaches from the Auth0 account, but the private credential remains in iCloud Keychain (iOS) or Google Password Manager (Android) until the user removes it from the OS-level credential manager. + +* **Android's PasskeyEnableScreen is informational only**. It is publicly callable, but it renders a static educational card, the `onEnableClick` callback is delegated to you. The actual enrollment logic lives inside the component's internal `PasskeyViewModel` and is not publicly exposed. + +* **Attestation conveyance is not surfaced**. The SDK does not let the caller select attestation policy (`none` / `indirect` / `direct`) or enumerate authenticator transports — it uses the Auth0 tenant's configured WebAuthn policy. + +## Learn more + + + + + Auth Methods Management component reference and the full list of supported factors. + + + + Initialize the SDK and wire the token provider to your Auth0 tenant. + + + diff --git a/main/docs/get-started/universal-components/my-account/my-account-overview.mdx b/main/docs/get-started/universal-components/my-account/my-account-overview.mdx new file mode 100644 index 0000000000..dbdd76180b --- /dev/null +++ b/main/docs/get-started/universal-components/my-account/my-account-overview.mdx @@ -0,0 +1,293 @@ +--- +title: Build a Self-Service Account Security Interface with My Account API +description: "Describes how to use Universal Components to build self-service account security interfaces with Auth0’s My Account API on iOS and Android." +sidebarTitle: Build Account Security UI +--- + +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + + +Universal Components allows you to build a self service account security UI within your native iOS and Android applications. +This enables your users to manage their own authentication methods, such as MFA factors, passkeys, and recovery codes directly inside your application, without leaving for a web browser or contacting support. + +## How it works +Universal Components leverage the [My Account API](/docs/manage-users/my-account-api), which operates using user scoped tokens, to render an authentication-methods management UI inside your application. + +When an authenticated user opens their account settings screen, The Auth0 SDK, [Auth0.swift on iOS](https://github.com/auth0/Auth0.swift) and [Auth0.Android on Android](https://github.com/auth0/Auth0.Android), retrieves an Access Token scoped to the My Account API audience. + +Universal Components use this token to call the API as the logged in user, ensuring each user can only modify their own authentication methods. + + +My Account components are used to create **end-user self-service** interfaces. +For **delegated admin** UI where a user manages an Auth0 Organization, read [Build a Delegated Admin Interface](/docs/get-started/universal-components/my-organization/build-delegated-admin). + + +### Available components + +Each component leverages the [My Account API](/docs/api/myaccount) and covers one or more authentication methods. + +| **Component** | **API endpoint** | +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------ | +| **Auth Methods Management** — `MyAccountAuthMethodsView` (iOS) / `AuthenticatorSettingsComponent` (Android). Enrolls, lists, and removes every authentication method on the user's account: Email OTP, SMS OTP, TOTP (Authenticator app), Push via Auth0 Guardian, Passkeys, and Recovery Codes. | `/me/v1/authentication-methods` | + +## Configure My Account Components using the Auth0 Dashboard + +To use My Account components, you need to configure your Auth0 tenant with the proper [APIs](/docs/api/myaccount), [applications](/docs/get-started/applications), and [scopes](/docs/get-started/applications/application-access-to-apis-client-grants). + +### Enable the My Account API + +1. Navigate to [Dashboard > Applications > APIs](https://manage.auth0.com/#/apis). +2. Select **Activate My Account API** to and ensure it is enabled for your tenant. + +### Create an Application and configure My Account API scopes + +1. Navigate to [Dashboard > Applications](https://manage.auth0.com/#/applications). +2. Select **Create Application**. +3. Select **Native**. +4. In the **Settings** tab, add the callback URL in the **Allowed Callback URLs**: + * For iOS applications use: `https://YOUR_AUTH0_DOMAIN://YOUR_BUNDLE_ID/ios/YOUR_BUNDLE_ID/callback`. + * For Android applications use: `https://YOUR_AUTH0_DOMAIN://YOUR_PACKAGE_NAME/android/YOUR_PACKAGE_NAME/callback`. +5. Add your logout URLs in the **Allowed Logout URLs**. +6. Select the **API Access Tab**. +7. Select **Edit** for the **Auth0 My Account API** to select the User delegated Access permissions: + +### Configure scopes + +Request the scopes your app needs from the My Account API when obtaining the user's access token. + + + ``` + create:me:authentication_methods + read:me:authentication_methods + update:me:authentication_methods + delete:me:authentication_methods + ``` + + + +The user's token only includes permissions they were granted during login. Request all four scopes if you want users to enroll, review, and remove authentication methods. + + +### Configure passkeys (optional) + +You can skip this step if you are not enabling passkey enrollment. + +1. Navigate to [Dashboard > Authentication > Database](https://manage.auth0.com/#/connections/database). Open the database connection you want passkeys enabled on. +2. Under **Passkey settings**, toggle **Require Passkey Enrollment** as needed for your policy. +3. Register your mobile applications so the platform authenticator can issue credentials for your Auth0 tenant: + + * For iOS applications add: your application's bundle ID under **Allowed iOS Applications**. + * For Android applications add: your applications's package name and SHA-256 signing fingerprints under **Allowed Android Applications**. Obtain the fingerprint with `keytool -list -v -keystore /path/to/keystore -alias YOUR_ALIAS | grep SHA256`, or copy it from **Play Console > Setup > App signing** for **Play App Signing**. + +Auth0 publishes the platform association files (apple-app-site-association on iOS, assetlinks.json on Android) on your tenant domain automatically. + + +Passkeys require custom domains to be enabled in your tenant. + + +## Configure your application + + + + +### Install the SDK + +To install the `Auth0UniversalComponents` use the Swift Package Manager, CocoaPods, or Carthage. For installation details and requirements, read [Auth0 Universal Components for Native Apps](/docs/get-started/universal-components/native/native-overview). + +### Initialize the SDK + +To initialize the SDK call the `Auth0UniversalComponentsSDKInitializer.initialize(...)` once at application start, typically in your application struct's `init`. If your application already uses `Auth0.plist` to configure Auth0.swift, add `ClientId`, `Domain`, and `Audience` keys and call: + + ```swift App.swift theme={null} + import SwiftUI + import Auth0 + import Auth0UniversalComponents + + @main + struct MyApp: App { + init() { + Auth0UniversalComponentsSDKInitializer.initialize( + tokenProvider: CredentialsManager(authentication: Auth0.authentication()) + ) + } + + var body: some Scene { + WindowGroup { ContentView() } + } + } + ``` + +Or pass the values directly in code: + + ```swift App.swift theme={null} + Auth0UniversalComponentsSDKInitializer.initialize( + domain: "YOUR_AUTH0_DOMAIN", + clientId: "YOUR_CLIENT_ID", + audience: "https://YOUR_AUTH0_DOMAIN/me/", + tokenProvider: CredentialsManager(authentication: Auth0.authentication()) + ) + ``` +### Configure the token provider + +The `TokenProvider` protocol is how the SDK asks your application for credentials. +Auth0 recommends to use the `Auth0.swift's CredentialsManager` for production integrations and avoid hand-rolling a custom implementation unless you have storage requirements that `Auth0.swift` doesn't meet. + + +If you manage credentials yourself, implement all four methods: + + ```swift theme={null} + struct AppTokenProvider: TokenProvider { + func fetchCredentials() async throws -> Credentials { + // Return the user's login credentials. + } + func storeCredentials(credentials: Credentials) { + // Persist new or refreshed credentials. + } + func store(apiCredentials: APICredentials, for audience: String) { + // Persist My Account API credentials keyed by audience. + } + func fetchAPICredentials(audience: String, scope: String) async throws -> APICredentials { + // Return cached My Account API credentials, refreshing if expired. + } + } + ``` + + +### Configure passkeys (optional) + +To configure [passkeys](/docs/authenticate/database-connections/passkeys) implement a `PasskeysConfiguration` to override default passkey behavior. All fields are optional. + + ```swift theme={null} + let passkeys = PasskeysConfiguration( + userIdentityId: "auth0|abc123", + connection: "Username-Password-Authentication" + ) + + Auth0UniversalComponentsSDKInitializer.initialize( + passkeyConfiguration: passkeys, + tokenProvider: credentialsManager + ) + ``` + +Add the Associated Domains entitlement to your Xcode target so the platform authenticator will issue credentials for your Auth0 tenant: + +``` + webcredentials:YOUR_AUTH0_DOMAIN +``` + + +Passkeys require iOS 16.6+, macOS 13.5+, or visionOS 1.0+. + + + + + + +### Install the SDK + +Use Gradle to install `com.auth0.universalcomponents:universal-components`. For installation details and platform requirements, read [Auth0 Universal Components for Native Apps](/docs/get-started/universal-components/native/native-overview) . + +### Initialize the SDK + +To initialize the SDK use the `Auth0UniversalComponents.initialize(...)` method once at the application start, typically from your application subclass or from `onCreate` in the launcher `Activity`. + + ```kotlin MainActivity.kt theme={null} + import com.auth0.android.Auth0 + import com.auth0.android.authentication.AuthenticationAPIClient + import com.auth0.android.authentication.storage.CredentialsManager + import com.auth0.android.authentication.storage.SharedPreferencesStorage + import com.auth0.universalcomponents.Auth0UniversalComponents + import com.auth0.universalcomponents.token.DefaultTokenProvider + + class MainActivity : ComponentActivity() { + + private val account by lazy { + Auth0.getInstance( + getString(R.string.com_auth0_client_id), + getString(R.string.com_auth0_domain) + ) + } + + private val credentialsManager by lazy { + CredentialsManager( + AuthenticationAPIClient(account), + SharedPreferencesStorage(this) + ) + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + Auth0UniversalComponents.initialize( + account = account, + tokenProvider = DefaultTokenProvider(credentialsManager), + scheme = getString(R.string.com_auth0_scheme) + ) + + setContent { MyApp() } + } + } +``` + +### Configure the token provider + +Use the `DefaultTokenProvider` which wraps the `Auth0.Android CredentialsManager`, unless you need custom token storage. + + +If you manage tokens outside the Auth0.Android `CredentialsManager`, implement the interface directly: + + ```kotlin theme={null} + class AppTokenProvider : TokenProvider { + override suspend fun fetchCredentials(): Credentials { + // Return the user's login credentials. + } + override suspend fun fetchApiCredentials( + audience: String, + scope: String? + ): APICredentials { + // Return cached My Account API credentials, refreshing if expired. + } + override suspend fun saveApiCredentials( + audience: String, + credentials: APICredentials + ) { + // Persist the freshly issued API credentials. + } + } + ``` + + +### Configure passkeys (optional) +Use the `PasskeyConfiguration` to customize how the SDK enrolls passkeys through the AndroidX Credential Manager. + + ```kotlin theme={null} + import androidx.credentials.CredentialManager + import com.auth0.universalcomponents.PasskeyConfiguration + + val passkeyConfiguration = PasskeyConfiguration( + credentialManager = CredentialManager.create(this), + connection = "Username-Password-Authentication", + userIdentity = "auth0|abc123" + ) + + Auth0UniversalComponents.initialize( + account = account, + tokenProvider = DefaultTokenProvider(credentialsManager), + scheme = getString(R.string.com_auth0_scheme), + passkeyConfiguration = passkeyConfiguration + ) + ``` + +Passkeys require Android 14+ for the full Credential Manager experience. On Android's versions 9–13, they sync through Google Password Manager on devices with up-to-date Play Services. + + + + + + Users must be authenticated before you render any component. Once the SDK is initialized and your `TokenProvider` is wired up, drop the [Auth Methods Management](/docs/get-started/universal-components/my-account/auth-methods-management) component into your settings screen to give users full MFA, passkey, and recovery-code self-service. + \ No newline at end of file diff --git a/main/docs/get-started/universal-components/native-foundations/native-overview.mdx b/main/docs/get-started/universal-components/native-foundations/native-overview.mdx index 2cec9cb76d..d3fb6bd079 100644 --- a/main/docs/get-started/universal-components/native-foundations/native-overview.mdx +++ b/main/docs/get-started/universal-components/native-foundations/native-overview.mdx @@ -8,7 +8,7 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" @@ -81,13 +81,13 @@ Auth0 recommends using the Swift Package Manager installer. Import the module in a Swift file to confirm the framework resolves: - ```swift - import Auth0UniversalComponents - ``` +```swift +import Auth0UniversalComponents +``` ### Sample application -You can review the sample application `AppUIComponents` target in the [ui-components-ios gitHub repo](https://github.com/auth0/ui-components-ios) for a reference implementation. It includes `AppUIComponentsApp.swift` for SDK initialization and `Common/ThemeManager.swift` for runtime theme switching. +You can review the sample application `AppUIComponents` target in the [ui-components-ios GitHub repo](https://github.com/auth0/ui-components-ios) for a reference implementation. It includes `AppUIComponentsApp.swift` for SDK initialization and `Common/ThemeManager.swift` for runtime theme switching. @@ -160,22 +160,32 @@ Auth0 recommends using [**Auth0.Android v3+**](https://github.com/auth0/Auth0.An Ensure [Compose](https://developer.android.com/develop/ui/compose/setup-compose-dependencies-and-compiler#setup-compose-dependencies) is enabled in your application's `build.gradle` file: - ```kotlin - android { - buildFeatures { - compose = true - } - } - ``` +```kotlin +android { + buildFeatures { + compose = true + } +} +``` ### Sample application -You can review the sample application in the Auth0 [ui-components-android gitHub repo](https://github.com/auth0/ui-components-android#documentation) for a reference implementation. It includes `MainActivity.kt` for Auth0 SDK setup and SDK initialization and `LoginSecurityScreen.kt` for renders of the `AuthenticatorSettingsComponent`. +You can review the sample application in the Auth0 [ui-components-android GitHub repo](https://github.com/auth0/ui-components-android#documentation) for a reference implementation. +It includes `MainActivity.kt` for Auth0 SDK setup and SDK initialization and `LoginSecurityScreen.kt` for renders of the `AuthenticatorSettingsComponent`. -Once the SDK is installed, you can continue to [Build a Self-Service Account Security Interface] to wire authentication and render the `auth-methods` management UI. + + +Once the SDK is installed, you can continue to [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/my-account/build-account-security) to wire authentication and render the `auth-methods` management UI. ## Next steps -Customize style and themes: Override colors, typography, spacing, radius, and size tokens using the Auth0 design-token system. -Build a Self-Service Account Security Interface: Prepare your Auth0 tenant, initialize the SDK, and render the auth-methods management UI. \ No newline at end of file + + + Override colors, typography, spacing, radius, and size tokens using the Auth0 design-token system. + + + + Prepare your Auth0 tenant, initialize the SDK, and render the auth-methods management UI. + + \ No newline at end of file diff --git a/main/docs/get-started/universal-components/native-foundations/native-theming.mdx b/main/docs/get-started/universal-components/native-foundations/native-theming.mdx index 2df663d542..550097344b 100644 --- a/main/docs/get-started/universal-components/native-foundations/native-theming.mdx +++ b/main/docs/get-started/universal-components/native-foundations/native-theming.mdx @@ -8,11 +8,14 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" -The native Universal Components SDKs share a design token model. Every visual property, such as colors, typography, spacing, corner radii, and component sizes are expressed as a named `token` where you can override one value without rewriting layouts. +Auth0 Universal Components for Native Applications SDKs share a design token model. + +Every visual property, such as colors, typography, spacing, corner radii, and component sizes are expressed as a named `token` where you can override one value without rewriting layouts. + The default theme renders the standard Auth0 style without any configuration, you only need to supply your own theme to match your brand. ## Customize style and themes @@ -24,7 +27,7 @@ The [iOS SDK](https://github.com/auth0/ui-components-ios) uses a SwiftUI `@Envir ### Zero configuration -If you do not configure a theme, the iOS SDK renders the default Auth0 default theme: +If you do not configure a theme, the iOS SDK renders the default Auth0 theme: ```swift import SwiftUI @@ -128,9 +131,11 @@ struct MyCustomStep: View { ### Token reference -#### Auth0ColorTokens + + Colors are split across three focused protocols, `Auth0BackgroundColorTokens`, `Auth0TextColorTokens`, and `Auth0BorderColorTokens` and aggregated into `Auth0ColorTokens`. + All color assets are adaptive, so light and dark modes are handled automatically by the asset catalog. #### Background primary @@ -282,8 +287,9 @@ All color assets are adaptive, so light and dark modes are handled automatically + -#### Typography Auth0TypographyTokens + Each token is an `Auth0TextStyle` bundling `font`, `tracking`, and `lineSpacing`. You can apply them using the `.auth0TextStyle(_:)` view modifier. @@ -394,9 +400,11 @@ Each token is an `Auth0TextStyle` bundling `font`, `tracking`, and `lineSpacing` If typeface `Inter` is not bundled in the host app, SwiftUI uses the `SF Pro` typeface automatically. -#### Spacing Auth0SpacingTokens + -Defaults to 4 pt grid. Use the token name in design hand-offs, not the raw pixel value. + + +Spacing defaults to `4 pt` grid. Use the token name in design hand-offs to customize spacing, not the raw pixel value. @@ -448,7 +456,9 @@ Defaults to 4 pt grid. Use the token name in design hand-offs, not the raw pixel
-#### Radius Auth0RadiusTokens +
+ + @@ -485,7 +495,9 @@ Defaults to 4 pt grid. Use the token name in design hand-offs, not the raw pixel
-#### Sizes Auth0SizeTokens +
+ + @@ -535,19 +547,20 @@ Defaults to 4 pt grid. Use the token name in design hand-offs, not the raw pixel
Large icons — three-dots menu
- +
The [Android SDK](https://github.com/auth0/ui-components-android) uses a Jetpack Compose theme that mirrors Material 3's MaterialTheme pattern. + You can wrap SDK content using `Auth0Theme { ... }` to provide tokens, or pass `themeConfiguration` directly to `AuthenticatorSettingsComponent`. -You can read tokens inside any composable with `Auth0Theme.colors`, `Auth0Theme.typography`, `Auth0Theme.shapes`, `Auth0Theme.dimensions`, and `Auth0Theme.sizes`. +You can read tokens inside any composable using `Auth0Theme.colors`, `Auth0Theme.typography`, `Auth0Theme.shapes`, `Auth0Theme.dimensions`, and `Auth0Theme.sizes`. ### Zero configuration -If you do not configure a theme, the Android SDK renders the default Auth0 default theme: +If you do not configure a theme, the Android SDK renders the default Auth0 theme: ```kotlin @Composable @@ -686,9 +699,9 @@ fun MFASettingsScreen() { ### Token reference -#### Colors Auth0Color + -Use `Auth0Color.light()` and `Auth0Color.dark()` factories as starting points and `.copy(...)` to override specific tokens. +To customize colors use `Auth0Color.light()` and `Auth0Color.dark()` factories as starting points and `.copy(...)` to override specific tokens. @@ -722,10 +735,11 @@ Use `Auth0Color.light()` and `Auth0Color.dark()` factories as starting points an
+
-#### Typography Auth0Typography + -Every token is a compose `TextStyle`. You can override it with `Auth0Typography.default().copy(...)`. +To customize typography use the compose token `TextStyle`. You can override it with `Auth0Typography.default().copy(...)`. @@ -756,7 +770,9 @@ Every token is a compose `TextStyle`. You can override it with `Auth0Typography.
-#### Shapes Auth0Shapes +
+ + @@ -778,15 +794,29 @@ Every token is a compose `TextStyle`. You can override it with `Auth0Typography.
+
-#### Dimensions Auth0Dimensions + -You can use `Auth0Theme.dimensions.*` to configure spacing values on a 4 dp grid: `spacingXxs`, `spacingXs`, `spacingSm`, `spacingMd`, `spacingLg`, `spacingXl`, `spacingXxl`, `spacingXxxl`. +You can use `Auth0Theme.dimensions.*` to configure spacing values on a `4 dp` grid: `spacingXxs`, `spacingXs`, `spacingSm`, `spacingMd`, `spacingLg`, `spacingXl`, `spacingXxl`, `spacingXxxl`. + -#### Sizes Auth0Sizes + You can use `Auth0Theme.sizes.*` to configure component dimensions: `buttonHeight`, `inputHeight`, icon sizes, OTP cell dimensions. - +
+ +## Learn more + + + + Platform prerequisites and installation for iOS and Android. + + + + Initialize the SDK and wire the token provider to your Auth0 tenant. + + From 3890690baa508031941380dd76b977de987d197c Mon Sep 17 00:00:00 2001 From: Carlos Date: Thu, 21 May 2026 12:21:05 +0200 Subject: [PATCH 04/50] Fix Web Foundations group in universal-components.json navigation MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Restore Web Foundations as a named group with correct webfoundations/ directory paths — main's IA refactor had flattened them without the subdirectory prefix. Co-Authored-By: Claude Opus 4.7 --- main/config/navigation/universal-components.json | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/main/config/navigation/universal-components.json b/main/config/navigation/universal-components.json index 5ffa762a67..d69e24be02 100644 --- a/main/config/navigation/universal-components.json +++ b/main/config/navigation/universal-components.json @@ -1,8 +1,13 @@ { "pages": [ "docs/get-started/universal-components/universal-components-overview", - "docs/get-started/universal-components/auth0-component-provider", - "docs/get-started/universal-components/universal-components-style", + { + "group": "Web Foundations", + "pages": [ + "docs/get-started/universal-components/webfoundations/auth0-component-provider", + "docs/get-started/universal-components/webfoundations/universal-components-style" + ] + }, { "group": "My Organization", "pages": [ From 534b9484ad89f99c5b0c90e1e5c04766f1c91a3e Mon Sep 17 00:00:00 2001 From: Suraj Thotakura Date: Mon, 25 May 2026 17:31:55 +0530 Subject: [PATCH 05/50] feat: update universal components docs structure --- .../navigation/universal-components.json | 72 +++-- main/config/redirects.json | 56 +++- .../android-overview.mdx} | 106 ++----- .../android/android-theming.mdx | 287 ++++++++++++++++++ .../components/auth-methods-management.mdx | 175 +++++++++++ .../components}/factors/passkeys.mdx | 89 ++---- .../components}/my-account-overview.mdx | 139 ++------- .../components}/auth-methods-management.mdx | 135 ++------ .../ios/components/factors/passkeys.mdx | 120 ++++++++ .../ios/components/my-account-overview.mdx | 181 +++++++++++ .../universal-components/ios/ios-overview.mdx | 98 ++++++ .../ios-theming.mdx} | 287 +----------------- .../universal-components-overview.mdx | 10 +- .../auth0-component-provider.mdx | 6 +- .../components}/build-delegated-admin.mdx | 0 .../components}/configure-org-domains.mdx | 6 +- .../components}/edit-organization-details.mdx | 6 +- .../components}/sso-provider-create.mdx | 6 +- .../components}/sso-provider-edit.mdx | 6 +- .../components}/sso-provider-table.mdx | 6 +- .../universal-components-style.mdx | 2 +- 21 files changed, 1086 insertions(+), 707 deletions(-) rename main/docs/get-started/universal-components/{native-foundations/native-overview.mdx => android/android-overview.mdx} (52%) create mode 100644 main/docs/get-started/universal-components/android/android-theming.mdx create mode 100644 main/docs/get-started/universal-components/android/components/auth-methods-management.mdx rename main/docs/get-started/universal-components/{my-account => android/components}/factors/passkeys.mdx (52%) rename main/docs/get-started/universal-components/{my-account => android/components}/my-account-overview.mdx (57%) rename main/docs/get-started/universal-components/{my-account => ios/components}/auth-methods-management.mdx (60%) create mode 100644 main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx create mode 100644 main/docs/get-started/universal-components/ios/components/my-account-overview.mdx create mode 100644 main/docs/get-started/universal-components/ios/ios-overview.mdx rename main/docs/get-started/universal-components/{native-foundations/native-theming.mdx => ios/ios-theming.mdx} (61%) rename main/docs/get-started/universal-components/{webfoundations => web}/auth0-component-provider.mdx (99%) rename main/docs/get-started/universal-components/{my-organization => web/components}/build-delegated-admin.mdx (100%) rename main/docs/get-started/universal-components/{my-organization/domain-management => web/components}/configure-org-domains.mdx (99%) rename main/docs/get-started/universal-components/{my-organization/organization-management => web/components}/edit-organization-details.mdx (99%) rename main/docs/get-started/universal-components/{my-organization/idp-management => web/components}/sso-provider-create.mdx (98%) rename main/docs/get-started/universal-components/{my-organization/idp-management => web/components}/sso-provider-edit.mdx (99%) rename main/docs/get-started/universal-components/{my-organization/idp-management => web/components}/sso-provider-table.mdx (99%) rename main/docs/get-started/universal-components/{webfoundations => web}/universal-components-style.mdx (99%) diff --git a/main/config/navigation/universal-components.json b/main/config/navigation/universal-components.json index d69e24be02..5970c12e16 100644 --- a/main/config/navigation/universal-components.json +++ b/main/config/navigation/universal-components.json @@ -1,35 +1,73 @@ { - "pages": [ - "docs/get-started/universal-components/universal-components-overview", + "groups": [ { - "group": "Web Foundations", + "group": " ", "pages": [ - "docs/get-started/universal-components/webfoundations/auth0-component-provider", - "docs/get-started/universal-components/webfoundations/universal-components-style" + "docs/get-started/universal-components/universal-components-overview" ] }, { - "group": "My Organization", + "group": "Web", + "icon": "globe", "pages": [ - "docs/get-started/universal-components/my-organization/build-delegated-admin", + "docs/get-started/universal-components/web/auth0-component-provider", + "docs/get-started/universal-components/web/universal-components-style", { - "group": "Domain Management", + "group": "Components", "pages": [ - "docs/get-started/universal-components/my-organization/domain-management/configure-org-domains" + { + "group": "My Organization", + "pages": [ + "docs/get-started/universal-components/web/components/build-delegated-admin", + "docs/get-started/universal-components/web/components/edit-organization-details", + "docs/get-started/universal-components/web/components/configure-org-domains", + "docs/get-started/universal-components/web/components/sso-provider-table", + "docs/get-started/universal-components/web/components/sso-provider-create", + "docs/get-started/universal-components/web/components/sso-provider-edit" + ] + } ] - }, + } + ] + }, + { + "group": "iOS", + "icon": "apple", + "pages": [ + "docs/get-started/universal-components/ios/ios-overview", + "docs/get-started/universal-components/ios/ios-theming", { - "group": "IDP Management", + "group": "Components", "pages": [ - "docs/get-started/universal-components/my-organization/idp-management/sso-provider-table", - "docs/get-started/universal-components/my-organization/idp-management/sso-provider-create", - "docs/get-started/universal-components/my-organization/idp-management/sso-provider-edit" + { + "group": "My Account", + "pages": [ + "docs/get-started/universal-components/ios/components/my-account-overview", + "docs/get-started/universal-components/ios/components/auth-methods-management", + "docs/get-started/universal-components/ios/components/factors/passkeys" + ] + } ] - }, + } + ] + }, + { + "group": "Android", + "icon": "android", + "pages": [ + "docs/get-started/universal-components/android/android-overview", + "docs/get-started/universal-components/android/android-theming", { - "group": "Organization Management", + "group": "Components", "pages": [ - "docs/get-started/universal-components/my-organization/organization-management/edit-organization-details" + { + "group": "My Account", + "pages": [ + "docs/get-started/universal-components/android/components/my-account-overview", + "docs/get-started/universal-components/android/components/auth-methods-management", + "docs/get-started/universal-components/android/components/factors/passkeys" + ] + } ] } ] diff --git a/main/config/redirects.json b/main/config/redirects.json index 5cf5e09ffa..e4b0dea3a8 100644 --- a/main/config/redirects.json +++ b/main/config/redirects.json @@ -22673,10 +22673,62 @@ }, { "source": "/docs/get-started/universal-components/auth0-component-provider", - "destination": "/docs/get-started/universal-components/webfoundations/auth0-component-provider" + "destination": "/docs/get-started/universal-components/web/auth0-component-provider" }, { "source": "/docs/get-started/universal-components/universal-components-style", - "destination": "/docs/get-started/universal-components/webfoundations/universal-components-style" + "destination": "/docs/get-started/universal-components/web/universal-components-style" + }, + { + "source": "/docs/get-started/universal-components/webfoundations/auth0-component-provider", + "destination": "/docs/get-started/universal-components/web/auth0-component-provider" + }, + { + "source": "/docs/get-started/universal-components/webfoundations/universal-components-style", + "destination": "/docs/get-started/universal-components/web/universal-components-style" + }, + { + "source": "/docs/get-started/universal-components/my-organization/build-delegated-admin", + "destination": "/docs/get-started/universal-components/web/components/build-delegated-admin" + }, + { + "source": "/docs/get-started/universal-components/my-organization/organization-management/edit-organization-details", + "destination": "/docs/get-started/universal-components/web/components/edit-organization-details" + }, + { + "source": "/docs/get-started/universal-components/my-organization/domain-management/configure-org-domains", + "destination": "/docs/get-started/universal-components/web/components/configure-org-domains" + }, + { + "source": "/docs/get-started/universal-components/my-organization/idp-management/sso-provider-table", + "destination": "/docs/get-started/universal-components/web/components/sso-provider-table" + }, + { + "source": "/docs/get-started/universal-components/my-organization/idp-management/sso-provider-create", + "destination": "/docs/get-started/universal-components/web/components/sso-provider-create" + }, + { + "source": "/docs/get-started/universal-components/my-organization/idp-management/sso-provider-edit", + "destination": "/docs/get-started/universal-components/web/components/sso-provider-edit" + }, + { + "source": "/docs/get-started/universal-components/native-foundations/native-overview", + "destination": "/docs/get-started/universal-components/ios/ios-overview" + }, + { + "source": "/docs/get-started/universal-components/native-foundations/native-theming", + "destination": "/docs/get-started/universal-components/ios/ios-theming" + }, + { + "source": "/docs/get-started/universal-components/my-account/my-account-overview", + "destination": "/docs/get-started/universal-components/ios/components/my-account-overview" + }, + { + "source": "/docs/get-started/universal-components/my-account/auth-methods-management", + "destination": "/docs/get-started/universal-components/ios/components/auth-methods-management" + }, + { + "source": "/docs/get-started/universal-components/my-account/factors/passkeys", + "destination": "/docs/get-started/universal-components/ios/components/factors/passkeys" } ] diff --git a/main/docs/get-started/universal-components/native-foundations/native-overview.mdx b/main/docs/get-started/universal-components/android/android-overview.mdx similarity index 52% rename from main/docs/get-started/universal-components/native-foundations/native-overview.mdx rename to main/docs/get-started/universal-components/android/android-overview.mdx index d3fb6bd079..25ed4e3a63 100644 --- a/main/docs/get-started/universal-components/native-foundations/native-overview.mdx +++ b/main/docs/get-started/universal-components/android/android-overview.mdx @@ -1,7 +1,7 @@ --- -title: Auth0 Universal Components for Native Applications -description: Learn how to install and configure Auth0 Universal Components for Native Applications -sidebarTitle: Configure Universal Components for Native Applications +title: Auth0 Universal Components for Android +description: Learn how to install and configure Auth0 Universal Components for Android applications. +sidebarTitle: Configure Universal Components for Android --- import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" @@ -13,104 +13,39 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" /> -Auth0 Universal Components for [Native Applications](/docs/get-started/auth0-overview/create-applications/native-apps#register-native-applications) ships pre-built, embeddable UI for identity flows using iOS ([SwiftUI](https://developer.apple.com/swiftui)) and Android ([Jetpack Compose](https://developer.android.com/compose)). +Auth0 Universal Components for [Native Applications](/docs/get-started/auth0-overview/create-applications/native-apps#register-native-applications) ships pre-built, embeddable UI for identity flows on Android using [Jetpack Compose](https://developer.android.com/compose). ## Prerequisites -To use Auth0 Universal Components for Native Applications: +To use Auth0 Universal Components for Android: -For iOS implementations: - -* Supported OS: **iOS 16.0+**, **macOS 13.0+**, **visionOS 1.0+**. -* Recommended Language: **Swift 5+** (6 Preferred), **Xcode 16+**. +* The base SDK supports **Android 11+** (API 30); Passkeys specifically require **Android 14+**. +* **Kotlin 2.2+**, **Android Gradle Plugin 8.11+**, **Jetpack Compose BOM 2024.09.00+**, **JDK 17+**. -Auth0 [Passkeys](/docs/authenticate/database-connections/passkeys) support requires **iOS 16.6+, macOS 13.5+,** or **visionOS 1.0+** for Apple platforms, and **Android 14+** for Android devices. The base SDK supports Android 11+ (API 30); Passkeys specifically require Android 14+. +Auth0 [Passkeys](/docs/authenticate/database-connections/passkeys) support requires **Android 14+** for Android devices. ## Install the SDK - - - -The iOS SDK is distributed as [`Auth0UniversalComponents`](/docs/get-started/universal-components/universal-components-overview). -Auth0 recommends using the Swift Package Manager installer. - -### Swift Package Manager - -1. Use Xcode, select **File → Add Package Dependencies** and enter: - - ```text - https://github.com/auth0/ui-components-ios.git - ``` - -2. Select version `1.0.0-beta.0` or later, then add `Auth0UniversalComponents` to your application target. - -### CocoaPods - -1. Add the pod to your Podfile: - - ```ruby - pod 'Auth0UniversalComponents', '~> 1.0.0' - ``` -2. Then run: - - ```bash - pod install - ``` - - -**Known issue**: The 1.0.0 CocoaPods release omits bundled Media, Colors, and Fonts resources. If your UI renders without the expected styling, use the Swift Package Manager until the next podspec release. - - -### Carthage - -1. Add the following to your Cartfile: - - ```text - github "auth0/ui-components-ios" ~> 1.0.0 - ``` - -2. Then run: - - ```bash - carthage update --use-xcframeworks - ``` - -### Verify the installation - -Import the module in a Swift file to confirm the framework resolves: - -```swift -import Auth0UniversalComponents -``` - -### Sample application - -You can review the sample application `AppUIComponents` target in the [ui-components-ios GitHub repo](https://github.com/auth0/ui-components-ios) for a reference implementation. It includes `AppUIComponentsApp.swift` for SDK initialization and `Common/ThemeManager.swift` for runtime theme switching. - - - - - The Android SDK is distributed through the [Maven Central](https://mvnrepository.com/artifact/com.auth0) repository as `com.auth0.universalcomponents:universal-components`. ### Gradle 1. Add the `mavencentral()` repository if it is not listed in your `settings.gradle` or `settings.gradle.kts` file: - ```kotlin + ```kotlin dependencyResolutionManagement { repositories { mavenCentral() google() } - } + } ``` 2. Add the dependency to your module-level `build.gradle` or `build.gradle.kts`: - ```kotlin + ```kotlin dependencies { implementation 'com.auth0.universalcomponents:universal-components:1.0.0-beta.0' } @@ -152,7 +87,7 @@ The Android SDK is distributed through the [Maven Central](https://mvnrepository -Auth0 recommends using [**Auth0.Android v3+**](https://github.com/auth0/Auth0.Android) toolkit in your application to avoid compilation errors. +Auth0 recommends using [**Auth0.Android v3+**](https://github.com/auth0/Auth0.Android) toolkit in your application to avoid compilation errors. @@ -160,7 +95,7 @@ Auth0 recommends using [**Auth0.Android v3+**](https://github.com/auth0/Auth0.An Ensure [Compose](https://developer.android.com/develop/ui/compose/setup-compose-dependencies-and-compiler#setup-compose-dependencies) is enabled in your application's `build.gradle` file: -```kotlin +```kotlin android { buildFeatures { compose = true @@ -169,23 +104,18 @@ android { ``` ### Sample application -You can review the sample application in the Auth0 [ui-components-android GitHub repo](https://github.com/auth0/ui-components-android#documentation) for a reference implementation. +You can review the sample application in the Auth0 [ui-components-android GitHub repo](https://github.com/auth0/ui-components-android#documentation) for a reference implementation. It includes `MainActivity.kt` for Auth0 SDK setup and SDK initialization and `LoginSecurityScreen.kt` for renders of the `AuthenticatorSettingsComponent`. - - - - - -Once the SDK is installed, you can continue to [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/my-account/build-account-security) to wire authentication and render the `auth-methods` management UI. +Once the SDK is installed, you can continue to [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview) to wire authentication and render the `auth-methods` management UI. ## Next steps - + Override colors, typography, spacing, radius, and size tokens using the Auth0 design-token system. - + Prepare your Auth0 tenant, initialize the SDK, and render the auth-methods management UI. - \ No newline at end of file + diff --git a/main/docs/get-started/universal-components/android/android-theming.mdx b/main/docs/get-started/universal-components/android/android-theming.mdx new file mode 100644 index 0000000000..5fd8adde5d --- /dev/null +++ b/main/docs/get-started/universal-components/android/android-theming.mdx @@ -0,0 +1,287 @@ +--- +title: Customize Style and Themes for Android Universal Components +description: Learn how to customize style and themes for Universal Components on Android. +sidebarTitle: Customize Style and Themes +--- + +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + + +Auth0 Universal Components for Android uses a design token model. + +Every visual property, such as colors, typography, spacing, corner radii, and component sizes are expressed as a named `token` where you can override one value without rewriting layouts. + +The default theme renders the standard Auth0 style without any configuration, you only need to supply your own theme to match your brand. + +## Customize style and themes + +The [Android SDK](https://github.com/auth0/ui-components-android) uses a Jetpack Compose theme that mirrors Material 3's MaterialTheme pattern. + +You can wrap SDK content using `Auth0Theme { ... }` to provide tokens, or pass `themeConfiguration` directly to `AuthenticatorSettingsComponent`. + +You can read tokens inside any composable using `Auth0Theme.colors`, `Auth0Theme.typography`, `Auth0Theme.shapes`, `Auth0Theme.dimensions`, and `Auth0Theme.sizes`. + +### Zero configuration + +If you do not configure a theme, the Android SDK renders the default Auth0 theme: + +```kotlin +@Composable +fun MFASettingsScreen() { + AuthenticatorSettingsComponent() +} +``` + +### Override a subset of tokens + +You can select which tokens to override using the `Auth0Color.light().copy(...)`, `Auth0Color.dark()`, or `Auth0Typography.default().copy(...)` tokens. + +```kotlin +@Composable +fun MFASettingsScreen() { + AuthenticatorSettingsComponent( + themeConfiguration = Auth0ThemeConfiguration( + color = Auth0Color.light().copy( + backgroundPrimary = Color(0xFFFF6B00), + textOnPrimary = Color.White + ) + ) + ) +} +``` + +### Force dark mode + +To force dark mode, you can wrap the component in `Auth0Theme(darkTheme = true)` or pass the dark color scheme explicitly: + +```kotlin +// Option 1: Force dark mode via Auth0Theme +@Composable +fun MFASettingsScreen() { + Auth0Theme(darkTheme = true) { + AuthenticatorSettingsComponent() + } +} + +// Option 2: Explicit dark color scheme +@Composable +fun MFASettingsScreen() { + AuthenticatorSettingsComponent( + themeConfiguration = Auth0ThemeConfiguration( + color = Auth0Color.dark() + ) + ) +} +``` + +### Configure a full brand theme + +You can configure for full brand alignment by combining colors, typography, and shapes for complete brand control using `Auth0ThemeConfiguration()` : + +```kotlin +fun MFASettingsScreen() { + AuthenticatorSettingsComponent( + themeConfiguration = Auth0ThemeConfiguration( + color = Auth0Color.light().copy( + backgroundPrimary = Color(0xFF0066CC), + textOnPrimary = Color.White, + backgroundLayerBase = Color(0xFFF5F5F5), + backgroundLayerMedium = Color.White, + textBold = Color(0xFF1F1F1F), + textDefault = Color(0xFF636363), + backgroundError = Color(0xFFFF4444), + backgroundSuccess = Color(0xFF00CC66), + borderDefault = Color(0xFFE0E0E0) + ), + typography = Auth0Typography.default().copy( + displayMedium = TextStyle(fontSize = 22.sp, fontWeight = FontWeight.Bold), + body = TextStyle(fontSize = 18.sp) + ), + shapes = Auth0Shapes( + none = RoundedCornerShape(0.dp), + extraSmall = RoundedCornerShape(4.dp), + small = RoundedCornerShape(8.dp), + medium = RoundedCornerShape(12.dp), + large = RoundedCornerShape(16.dp), + extraLarge = RoundedCornerShape(24.dp), + full = RoundedCornerShape(100.dp) + ) + ) + ) +} +``` + +### Read theme tokens in your own composables + +You can read theme tokens in an `Auth0Theme{ ... }` composable using the accessor object: + +```kotlin +@Composable +fun CustomAuthCard() { + Card( + shape = Auth0Theme.shapes.medium, + colors = CardDefaults.cardColors( + containerColor = Auth0Theme.colors.backgroundLayerMedium + ) + ) { + Column(modifier = Modifier.padding(Auth0Theme.dimensions.spacingMd)) { + Text( + text = "Authenticator", + style = Auth0Theme.typography.title, + color = Auth0Theme.colors.textBold + ) + Text( + text = "Enabled", + style = Auth0Theme.typography.bodySmall, + color = Auth0Theme.colors.textDefault + ) + } + } +} +``` + +### Switch themes at runtime + +You can keep the theme configuration in state to swap between light and dark (or brand variants) without recreating the screen: + +```kotlin +@Composable +fun MFASettingsScreen() { + var isDarkMode by remember { mutableStateOf(false) } + + val themeConfig = Auth0ThemeConfiguration( + color = if (isDarkMode) Auth0Color.dark() else Auth0Color.light() + ) + + Column { + Switch(checked = isDarkMode, onCheckedChange = { isDarkMode = it }) + AuthenticatorSettingsComponent(themeConfiguration = themeConfig) + } +} +``` + +### Token reference + + + +To customize colors use `Auth0Color.light()` and `Auth0Color.dark()` factories as starting points and `.copy(...)` to override specific tokens. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TokenUsage
`backgroundPrimary`, `backgroundPrimarySubtle`, `backgroundInverse`, `backgroundAccent`CTA and accent surfaces
`backgroundLayerTop`, `backgroundLayerMedium`, `backgroundLayerBase`Overlay / card / app-background layers
`backgroundError`, `backgroundErrorSubtle`, `backgroundSuccess`, `backgroundSuccessSubtle`Feedback surfaces
`borderBold`, `borderDefault`, `borderSubtle`, `borderShadow`Emphasis and elevation borders
`textBold`, `textDefault`, `textSubtle`Heading / body / caption text
`textOnPrimary`, `textOnInverse`, `textError`, `textSuccess`, `textAccent`Text on colored surfaces
+
+ + + +To customize typography use the compose token `TextStyle`. You can override it with `Auth0Typography.default().copy(...)`. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TokenUsage
`displayMedium`, `display`Hero / major screen headings
`titleLarge`, `title`Screen titles, in-content titles
`body`, `bodySmall`Descriptions, body copy, footnotes
`label`Button labels, form field labels
`helper`, `overline`Captions, helper text, category labels
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
TokenUsage
`none`No rounding
`extraSmall`, `small`, `medium`, `large`, `extraLarge`Standard rounding scale
`full`Fully rounded (pill)
+
+ + + +You can use `Auth0Theme.dimensions.*` to configure spacing values on a `4 dp` grid: `spacingXxs`, `spacingXs`, `spacingSm`, `spacingMd`, `spacingLg`, `spacingXl`, `spacingXxl`, `spacingXxxl`. + + + + +You can use `Auth0Theme.sizes.*` to configure component dimensions: `buttonHeight`, `inputHeight`, icon sizes, OTP cell dimensions. + + +## Learn more + + + + Platform prerequisites and installation for Android. + + + + Initialize the SDK and wire the token provider to your Auth0 tenant. + + diff --git a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx new file mode 100644 index 0000000000..3aeebbe675 --- /dev/null +++ b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx @@ -0,0 +1,175 @@ +--- +title: Auth Methods Management on Android +description: Render a full-screen UI that lets users enroll, review, and remove MFA factors, passkeys, and recovery codes using the Auth0 My Account API on Android. +sidebarTitle: Auth Methods Management +--- + +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + + +The Auth Methods Management component renders a complete UI for managing a user's authentication methods. +It ships as `AuthenticatorSettingsComponent` on Android — a Jetpack Compose composable that handles every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). You do not need to orchestrate navigation, call endpoints, or manage state. + +## Setup requirements + + +Before rendering this component, follow [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK with a token provider. +The component reads its configuration, token provider, and passkey settings from the initialized SDK singleton. + + +## Supported factors + +The component handles every factor Auth0 supports through the My Account API. Each factor's screens inherit the component's active theme, read [Customize Style and Themes](/docs/get-started/universal-components/android/android-theming) for the full token catalog. + +Enable the factors you want on the Auth0 tenant; the component automatically shows and hides factors based on what the tenant exposes. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
FactorWhat the component rendersSDK notes
Email OTPEmail input → 6-digit OTP verificationPlatform OTP autofill (Android keyboard autofill) works against the OTP field.
SMS OTPCountry-code picker + phone entry → 6-digit OTP verificationAndroid SMS Retriever API is not used; the SMS body has no app hash. Autofill via the system keyboard works normally.
TOTP (Authenticator app)QR code with manual-entry key → 6-digit OTP verificationRenders the standard otpauth:// payload; no custom brand logo injection into the QR.
Push notificationsQR code for Auth0 Guardian scan → "waiting for approval" stateEnd users need the public Auth0 Guardian app. Enterprise customers with a branded Guardian SDK build must surface their own install link outside the component.
PasskeysEducational screen → OS biometric prompt → enrolled entry in the listRequires Digital Asset Links (Android 14+). See the dedicated page for app-side platform setup.
Recovery codesDisplay-once code list with copy action + "I've saved my codes" confirmationCodes are displayed to the user and never returned to the caller. Copy-to-clipboard uses the platform's standard clipboard API.
+ +### Getting started + +Use the `AuthenticatorSettingsComponent()` from any composable. The SDK handles all internal navigation between enrollment, verification, and management screens. + +```kotlin LoginSecurityScreen.kt +import androidx.compose.runtime.Composable +import com.auth0.universalcomponents.presentation.ui.mfa.AuthenticatorSettingsComponent + +@Composable +fun LoginSecurityScreen() { + AuthenticatorSettingsComponent() +} +``` + +### Parameters + + + + + + + + + + + + + + + + + + + + + + +
ParameterTypeDefaultPurpose
modifierModifierModifierStandard Compose modifier.
themeConfigurationAuth0ThemeConfigurationAuth0ThemeConfiguration.DefaultOverride design tokens — colors, typography, shapes, dimensions, sizes. See Customize Style and Themes.
+ +### Customization + +Theming is applied to the component as a whole; individual factor screens inherit the active theme. + +Use a custom `Auth0ThemeConfiguration` to override design tokens across every screen the component renders. + +```kotlin +AuthenticatorSettingsComponent( + themeConfiguration = Auth0ThemeConfiguration( + color = Auth0Color.light().copy( + backgroundPrimary = Color(0xFF0066CC), + textOnPrimary = Color.White + ) + ) +) +``` + +For the full token catalog and dark-mode patterns, read [Customize Style and Themes](/docs/get-started/universal-components/android/android-theming). + +### Advanced compose NavHost integration + +The `AuthenticatorSettingsComponent` participates in Compose's `NavHost` when present and does not need special wiring. Use it as any other composable, if it is a destination in your `NavHost`, back-navigation defers to the host's `NavController`. + +```kotlin +@Composable +fun AccountNavGraph(navController: NavHostController) { + NavHost(navController, startDestination = "settings") { + composable("settings") { SettingsScreen(navController) } + composable("auth-methods") { AuthenticatorSettingsComponent() } + } +} +``` + +Internally, the SDK manages its own nested navigation between enrollment, verification, and management screens. That internal graph is isolated from your application's `NavController`, so no naming collisions can occur. + +### Localization + +All user facing strings live in the SDK's `values/strings.xml` file. You can override any string in your application by redefining the same key in your own `values/strings.xml` file: + +```text + + Next + +``` + +Your resource value shadows the SDK default at build time. +To ship localized copies, you can provide translated `values-/strings.xml` files that use the same keys. + +## Limitations + +* **No standalone factor components on Android**. Every factor renders inside the Auth Methods Management component. There is no public API to enroll, verify, or remove a single factor from a different part of your application. +* **No standalone list/remove components**. The SDK does not ship public components for listing enrolled factors or removing them outside the component. Use the Auth methods component for the full management experience. +* **Post-login passkey prompts are not supported**. Prompting a user to save a passkey immediately after sign-in (separate from the settings screen) is not covered by this SDK today. You can track [universal-components-android](https://github.com/auth0/universal-components-android/issues) for updates. + +## Learn more + + + + + Initialize the SDK and wire the token provider to your Auth0 tenant. + + + + Override colors, typography, spacing, radius, and size tokens using the Auth0 design-token system. + + + diff --git a/main/docs/get-started/universal-components/my-account/factors/passkeys.mdx b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx similarity index 52% rename from main/docs/get-started/universal-components/my-account/factors/passkeys.mdx rename to main/docs/get-started/universal-components/android/components/factors/passkeys.mdx index 1c06ff5433..6977f9b560 100644 --- a/main/docs/get-started/universal-components/my-account/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx @@ -1,6 +1,6 @@ --- -title: Passkeys -description: SDK-specific behavior, app-side entitlements, and customization for the Passkey factor rendered inside the Auth Methods Management component. +title: Passkeys on Android +description: SDK-specific behavior, app-side entitlements, and customization for the Passkey factor rendered inside the Auth Methods Management component on Android. sidebarTitle: Passkeys --- @@ -12,9 +12,9 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -The [Auth Methods Management](/docs/get-started/universal-components/my-account/auth-methods-management) component renders the [Passkey](/docs/authenticate/database-connections/passkeys) enrollment flow, an educational screen, a WebAuthn registration handshake with the platform authenticator, and the enrolled-factor entry in the authenticator list. +The [Auth Methods Management](/docs/get-started/universal-components/android/components/auth-methods-management) component renders the [Passkey](/docs/authenticate/database-connections/passkeys) enrollment flow, an educational screen, a WebAuthn registration handshake with the platform authenticator, and the enrolled-factor entry in the authenticator list. -Unlike other factors, passkeys require application-side platform entitlements that the SDK cannot configure. This page covers the platform entitlements and SDK configuration specific to passkeys. +Unlike other factors, passkeys require application-side platform entitlements that the SDK cannot configure. This page covers the platform entitlements and SDK configuration specific to passkeys on Android. ## Prerequisites @@ -24,50 +24,15 @@ Unlike other factors, passkeys require application-side platform entitlements th 2. **Complete the Universal Components setup** - Read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/my-account/build-account-security) to install the SDK, configure your Auth0 tenant, and initialize the SDK. Set `PasskeysConfiguration` (iOS) or `PasskeyConfiguration` (Android) on the SDK initializer if your integration needs a specific connection or linked identity. + Read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK. Set `PasskeyConfiguration` on the SDK initializer if your integration needs a specific connection or linked identity. -3. **Complete the platform level application setup** +3. **Complete the platform level application setup** Unlike other factors, passkeys requires your application to prove ownership of the Auth0 domain at the OS level. Follow the [Platform setup](#platform-setup) steps to configure. ## Platform setup -Passkeys bind to the relying party domain Auth0 issues credentials for, typically your Auth0 tenant domain or [custom domain](/docs/customize/custom-domains). The platform verifies this binding through Apple Associated Domains (iOS) or Android Digital Asset Links. - - - - - -1. **Add the Associated Domains entitlement** - - In **Xcode**, open your target’s **Signing & Capabilities** and add **Associated Domains**. Add the entry: - - ```text - webcredentials:YOUR_AUTH0_DOMAIN - ``` - - For example: `webcredentials:your-tenant.auth0.com`. If you use a custom domain, use that instead. - -2. **Register your application bundle ID in the Auth0 Dashboard** - - A. Navigate to **Auth0 Dashboard → Authentication → Database** - B. Select the **Database Connections** - C. Select the **Passkey settings** tab - D. Add your application bundle ID in the **Allowed iOS Applications** - - Auth0 publishes the `apple-app-site-association` file at `/.well-known/apple-app-site-association` on your domain automatically and includes every registered bundle ID. - -3. **Minimum iOS version** - - The Auth Methods Management component hides the Passkey option on devices running **iOS < 16.6**, **macOS < 13.5**, or **visionOS < 1.0**. - - -Apple’s [Supporting associated domains](https://developer.apple.com/documentation/xcode/supporting-associated-domains) guide is the authoritative reference for entitlements and the AASA file. Validate your AASA with the [AASA Validator](https://app-site-association.cdn-apple.com/) before testing on-device. - - - - - +Passkeys bind to the relying party domain Auth0 issues credentials for, typically your Auth0 tenant domain or [custom domain](/docs/customize/custom-domains). The platform verifies this binding through Android Digital Asset Links. 1. **Confirm AndroidX Credentials is resolved** @@ -76,12 +41,12 @@ Apple’s [Supporting associated domains](https://developer.apple.com/documentat 2. **Register your application package and SHA-256 signing fingerprints in the Auth0 Dashboard** A. Navigate to **Auth0 Dashboard → Authentication → Database** - B. Select the **Database Connections** + B. Select the **Database Connections** C. Select the **Passkey settings** tab D. Add your application package and SHA-256 signing fingerprints in the **Allowed Android Applications** - Auth0 serves `/.well-known/assetlinks.json` on your domain automatically and includes every registered app. - + Auth0 serves `/.well-known/assetlinks.json` on your domain automatically and includes every registered app. + Obtain fingerprints with: ```bash @@ -91,22 +56,18 @@ Apple’s [Supporting associated domains](https://developer.apple.com/documentat 3. **Minimum Android version** - Platform-credential passkeys require **Android 14+ (API 34+)** for the full Credential Manager experience. - On **Android 9–13 (API 28–33)**, passkeys sync through Google Password Manager on devices with up-to-date Play Services. + Platform-credential passkeys require **Android 14+ (API 34+)** for the full Credential Manager experience. + On **Android 9–13 (API 28–33)**, passkeys sync through Google Password Manager on devices with up-to-date Play Services. The component hides the Passkey option for **Android API 28** and below. -Google’s [Credential Manager](https://developer.android.com/identity/sign-in/credential-manager) guide and the [Digital Asset Links tester](https://developers.google.com/digital-asset-links/tools/generator) are the authoritative references. Validate your `assetlinks.json` before testing on-device. +Google's [Credential Manager](https://developer.android.com/identity/sign-in/credential-manager) guide and the [Digital Asset Links tester](https://developers.google.com/digital-asset-links/tools/generator) are the authoritative references. Validate your `assetlinks.json` before testing on-device. - - - - ## Customization -The Passkey educational and status screens inherit the component’s active theme. The biometric prompt itself is rendered by the OS and cannot be themed. +The Passkey educational and status screens inherit the component's active theme. The biometric prompt itself is rendered by the OS and cannot be themed. @@ -115,35 +76,35 @@ The Passkey educational and status screens inherit the component’s active them - + - + - + - + - +
`background.accent` / `backgroundAccent``backgroundAccent` Accent color for the passkey educational illustration
`background.primary` / `backgroundPrimary``backgroundPrimary` Add Passkey button background
`text.onPrimary` / `textOnPrimary``textOnPrimary` Add Passkey button label
`text.bold` / `textBold``textBold` Headline and explainer copy
`radius.button` / `shapes.large``shapes.large` Button corner radius
-For the full token, read [Customize Style and Themes](/docs/get-started/universal-components/native/native-theming). +For the full token, read [Customize Style and Themes](/docs/get-started/universal-components/android/android-theming). ### SDK Limitations -* **Passkeys can only be enrolled from inside the Auth Methods Management component**. There is no public SwiftUI or Composable API to trigger a standalone passkey enrollment from elsewhere in your app. Post-login "save a passkey" upsell prompts are not supported today. You can track [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) and [universal-components-android](https://github.com/auth0/universal-components-android/issues) for updates. +* **Passkeys can only be enrolled from inside the Auth Methods Management component**. There is no public Composable API to trigger a standalone passkey enrollment from elsewhere in your app. Post-login "save a passkey" upsell prompts are not supported today. You can track [universal-components-android](https://github.com/auth0/universal-components-android/issues) for updates. -* **Removing a passkey in the component does not purge the OS credential store**. The enrolled passkey detaches from the Auth0 account, but the private credential remains in iCloud Keychain (iOS) or Google Password Manager (Android) until the user removes it from the OS-level credential manager. +* **Removing a passkey in the component does not purge the OS credential store**. The enrolled passkey detaches from the Auth0 account, but the private credential remains in Google Password Manager until the user removes it from the OS-level credential manager. * **Android's PasskeyEnableScreen is informational only**. It is publicly callable, but it renders a static educational card, the `onEnableClick` callback is delegated to you. The actual enrollment logic lives inside the component's internal `PasskeyViewModel` and is not publicly exposed. @@ -153,11 +114,11 @@ For the full token, read [Customize Style and Themes](/docs/get-started/universa - - Auth Methods Management component reference and the full list of supported factors. + + Auth Methods Management component reference and the full list of supported factors. - + Initialize the SDK and wire the token provider to your Auth0 tenant. diff --git a/main/docs/get-started/universal-components/my-account/my-account-overview.mdx b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx similarity index 57% rename from main/docs/get-started/universal-components/my-account/my-account-overview.mdx rename to main/docs/get-started/universal-components/android/components/my-account-overview.mdx index dbdd76180b..075577a404 100644 --- a/main/docs/get-started/universal-components/my-account/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx @@ -1,6 +1,6 @@ --- -title: Build a Self-Service Account Security Interface with My Account API -description: "Describes how to use Universal Components to build self-service account security interfaces with Auth0’s My Account API on iOS and Android." +title: Build a Self-Service Account Security Interface with My Account API on Android +description: "Describes how to use Universal Components to build self-service account security interfaces with Auth0's My Account API on Android." sidebarTitle: Build Account Security UI --- @@ -12,28 +12,28 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -Universal Components allows you to build a self service account security UI within your native iOS and Android applications. +Universal Components allows you to build a self-service account security UI within your native Android application. This enables your users to manage their own authentication methods, such as MFA factors, passkeys, and recovery codes directly inside your application, without leaving for a web browser or contacting support. ## How it works -Universal Components leverage the [My Account API](/docs/manage-users/my-account-api), which operates using user scoped tokens, to render an authentication-methods management UI inside your application. +Universal Components leverage the [My Account API](/docs/manage-users/my-account-api), which operates using user scoped tokens, to render an authentication-methods management UI inside your application. -When an authenticated user opens their account settings screen, The Auth0 SDK, [Auth0.swift on iOS](https://github.com/auth0/Auth0.swift) and [Auth0.Android on Android](https://github.com/auth0/Auth0.Android), retrieves an Access Token scoped to the My Account API audience. +When an authenticated user opens their account settings screen, the [Auth0.Android](https://github.com/auth0/Auth0.Android) SDK retrieves an Access Token scoped to the My Account API audience. Universal Components use this token to call the API as the logged in user, ensuring each user can only modify their own authentication methods. -My Account components are used to create **end-user self-service** interfaces. -For **delegated admin** UI where a user manages an Auth0 Organization, read [Build a Delegated Admin Interface](/docs/get-started/universal-components/my-organization/build-delegated-admin). +My Account components are used to create **end-user self-service** interfaces. +For **delegated admin** UI where a user manages an Auth0 Organization, read [Build a Delegated Admin Interface](/docs/get-started/universal-components/web/components/build-delegated-admin). ### Available components Each component leverages the [My Account API](/docs/api/myaccount) and covers one or more authentication methods. -| **Component** | **API endpoint** | -| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------ | -| **Auth Methods Management** — `MyAccountAuthMethodsView` (iOS) / `AuthenticatorSettingsComponent` (Android). Enrolls, lists, and removes every authentication method on the user's account: Email OTP, SMS OTP, TOTP (Authenticator app), Push via Auth0 Guardian, Passkeys, and Recovery Codes. | `/me/v1/authentication-methods` | +| **Component** | **API endpoint** | +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------ | +| **Auth Methods Management** — `AuthenticatorSettingsComponent`. Enrolls, lists, and removes every authentication method on the user's account: Email OTP, SMS OTP, TOTP (Authenticator app), Push via Auth0 Guardian, Passkeys, and Recovery Codes. | `/me/v1/authentication-methods` | ## Configure My Account Components using the Auth0 Dashboard @@ -46,12 +46,10 @@ To use My Account components, you need to configure your Auth0 tenant with the p ### Create an Application and configure My Account API scopes -1. Navigate to [Dashboard > Applications](https://manage.auth0.com/#/applications). +1. Navigate to [Dashboard > Applications](https://manage.auth0.com/#/applications). 2. Select **Create Application**. 3. Select **Native**. -4. In the **Settings** tab, add the callback URL in the **Allowed Callback URLs**: - * For iOS applications use: `https://YOUR_AUTH0_DOMAIN://YOUR_BUNDLE_ID/ios/YOUR_BUNDLE_ID/callback`. - * For Android applications use: `https://YOUR_AUTH0_DOMAIN://YOUR_PACKAGE_NAME/android/YOUR_PACKAGE_NAME/callback`. +4. In the **Settings** tab, add the callback URL in the **Allowed Callback URLs**: `https://YOUR_AUTH0_DOMAIN://YOUR_PACKAGE_NAME/android/YOUR_PACKAGE_NAME/callback`. 5. Add your logout URLs in the **Allowed Logout URLs**. 6. Select the **API Access Tab**. 7. Select **Edit** for the **Auth0 My Account API** to select the User delegated Access permissions: @@ -79,118 +77,19 @@ You can skip this step if you are not enabling passkey enrollment. 1. Navigate to [Dashboard > Authentication > Database](https://manage.auth0.com/#/connections/database). Open the database connection you want passkeys enabled on. 2. Under **Passkey settings**, toggle **Require Passkey Enrollment** as needed for your policy. -3. Register your mobile applications so the platform authenticator can issue credentials for your Auth0 tenant: +3. Register your Android application package name and SHA-256 signing fingerprints under **Allowed Android Applications**. Obtain the fingerprint with `keytool -list -v -keystore /path/to/keystore -alias YOUR_ALIAS | grep SHA256`, or copy it from **Play Console > Setup > App signing** for **Play App Signing**. - * For iOS applications add: your application's bundle ID under **Allowed iOS Applications**. - * For Android applications add: your applications's package name and SHA-256 signing fingerprints under **Allowed Android Applications**. Obtain the fingerprint with `keytool -list -v -keystore /path/to/keystore -alias YOUR_ALIAS | grep SHA256`, or copy it from **Play Console > Setup > App signing** for **Play App Signing**. - -Auth0 publishes the platform association files (apple-app-site-association on iOS, assetlinks.json on Android) on your tenant domain automatically. +Auth0 publishes the platform association file (`assetlinks.json`) on your tenant domain automatically. -Passkeys require custom domains to be enabled in your tenant. +Passkeys require custom domains to be enabled in your tenant. ## Configure your application - - - -### Install the SDK - -To install the `Auth0UniversalComponents` use the Swift Package Manager, CocoaPods, or Carthage. For installation details and requirements, read [Auth0 Universal Components for Native Apps](/docs/get-started/universal-components/native/native-overview). - -### Initialize the SDK - -To initialize the SDK call the `Auth0UniversalComponentsSDKInitializer.initialize(...)` once at application start, typically in your application struct's `init`. If your application already uses `Auth0.plist` to configure Auth0.swift, add `ClientId`, `Domain`, and `Audience` keys and call: - - ```swift App.swift theme={null} - import SwiftUI - import Auth0 - import Auth0UniversalComponents - - @main - struct MyApp: App { - init() { - Auth0UniversalComponentsSDKInitializer.initialize( - tokenProvider: CredentialsManager(authentication: Auth0.authentication()) - ) - } - - var body: some Scene { - WindowGroup { ContentView() } - } - } - ``` - -Or pass the values directly in code: - - ```swift App.swift theme={null} - Auth0UniversalComponentsSDKInitializer.initialize( - domain: "YOUR_AUTH0_DOMAIN", - clientId: "YOUR_CLIENT_ID", - audience: "https://YOUR_AUTH0_DOMAIN/me/", - tokenProvider: CredentialsManager(authentication: Auth0.authentication()) - ) - ``` -### Configure the token provider - -The `TokenProvider` protocol is how the SDK asks your application for credentials. -Auth0 recommends to use the `Auth0.swift's CredentialsManager` for production integrations and avoid hand-rolling a custom implementation unless you have storage requirements that `Auth0.swift` doesn't meet. - - -If you manage credentials yourself, implement all four methods: - - ```swift theme={null} - struct AppTokenProvider: TokenProvider { - func fetchCredentials() async throws -> Credentials { - // Return the user's login credentials. - } - func storeCredentials(credentials: Credentials) { - // Persist new or refreshed credentials. - } - func store(apiCredentials: APICredentials, for audience: String) { - // Persist My Account API credentials keyed by audience. - } - func fetchAPICredentials(audience: String, scope: String) async throws -> APICredentials { - // Return cached My Account API credentials, refreshing if expired. - } - } - ``` - - -### Configure passkeys (optional) - -To configure [passkeys](/docs/authenticate/database-connections/passkeys) implement a `PasskeysConfiguration` to override default passkey behavior. All fields are optional. - - ```swift theme={null} - let passkeys = PasskeysConfiguration( - userIdentityId: "auth0|abc123", - connection: "Username-Password-Authentication" - ) - - Auth0UniversalComponentsSDKInitializer.initialize( - passkeyConfiguration: passkeys, - tokenProvider: credentialsManager - ) - ``` - -Add the Associated Domains entitlement to your Xcode target so the platform authenticator will issue credentials for your Auth0 tenant: - -``` - webcredentials:YOUR_AUTH0_DOMAIN -``` - - -Passkeys require iOS 16.6+, macOS 13.5+, or visionOS 1.0+. - - - - - - ### Install the SDK -Use Gradle to install `com.auth0.universalcomponents:universal-components`. For installation details and platform requirements, read [Auth0 Universal Components for Native Apps](/docs/get-started/universal-components/native/native-overview) . +Use Gradle to install `com.auth0.universalcomponents:universal-components`. For installation details and platform requirements, read [Auth0 Universal Components for Android](/docs/get-started/universal-components/android/android-overview). ### Initialize the SDK @@ -285,9 +184,7 @@ Use the `PasskeyConfiguration` to customize how the SDK enrolls passkeys through Passkeys require Android 14+ for the full Credential Manager experience. On Android's versions 9–13, they sync through Google Password Manager on devices with up-to-date Play Services. - - - Users must be authenticated before you render any component. Once the SDK is initialized and your `TokenProvider` is wired up, drop the [Auth Methods Management](/docs/get-started/universal-components/my-account/auth-methods-management) component into your settings screen to give users full MFA, passkey, and recovery-code self-service. - \ No newline at end of file + Users must be authenticated before you render any component. Once the SDK is initialized and your `TokenProvider` is wired up, drop the [Auth Methods Management](/docs/get-started/universal-components/android/components/auth-methods-management) component into your settings screen to give users full MFA, passkey, and recovery-code self-service. + diff --git a/main/docs/get-started/universal-components/my-account/auth-methods-management.mdx b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx similarity index 60% rename from main/docs/get-started/universal-components/my-account/auth-methods-management.mdx rename to main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx index 20e0cd2d96..dbc482d1a1 100644 --- a/main/docs/get-started/universal-components/my-account/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx @@ -1,6 +1,6 @@ --- -title: Auth Methods Management -description: Render a full-screen UI that lets users enroll, review, and remove MFA factors, passkeys, and recovery codes using the Auth0 My Account API. +title: Auth Methods Management on iOS +description: Render a full-screen UI that lets users enroll, review, and remove MFA factors, passkeys, and recovery codes using the Auth0 My Account API on iOS. sidebarTitle: Auth Methods Management --- @@ -12,19 +12,19 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -The Auth Methods Management component renders a complete UI for managing a user's authentication methods. -It ships as `MyAccountAuthMethodsView` on iOS and `AuthenticatorSettingsComponent` on Android, both are views that handle every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). You do not need to orchestrate navigation, call endpoints, or manage state. +The Auth Methods Management component renders a complete UI for managing a user's authentication methods. +It ships as `MyAccountAuthMethodsView` on iOS — a SwiftUI view that handles every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). You do not need to orchestrate navigation, call endpoints, or manage state. ## Setup requirements -Before rendering this component, follow [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/my-account/build-account-security) to install the SDK, configure your Auth0 tenant, and initialize the SDK with a token provider. +Before rendering this component, follow [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK with a token provider. The component reads its configuration, token provider, and passkey settings from the initialized SDK singleton. ## Supported factors -The component handles every factor Auth0 supports through the My Account API. Each factor's screens inherit the component's active theme, read [Customize Style and Themes](/docs/get-started/universal-components/native/native-theming) for the full token catalog. +The component handles every factor Auth0 supports through the My Account API. Each factor's screens inherit the component's active theme, read [Customize Style and Themes](/docs/get-started/universal-components/ios/ios-theming) for the full token catalog. Enable the factors you want on the Auth0 tenant; the component automatically shows and hides factors based on what the tenant exposes. @@ -38,12 +38,12 @@ Enable the factors you want on the Auth0 tenant; the component automatically sho Email OTP Email input → 6-digit OTP verification - Platform OTP autofill (iOS QuickType, Android keyboard autofill) works against the OTP field. + Platform OTP autofill (iOS QuickType) works against the OTP field. SMS OTP Country-code picker + phone entry → 6-digit OTP verification - Android SMS Retriever API is not used; the SMS body has no app hash. Autofill via the system keyboard works normally. + Autofill via the system keyboard works normally. TOTP (Authenticator app) @@ -56,9 +56,9 @@ Enable the factors you want on the Auth0 tenant; the component automatically sho End users need the public Auth0 Guardian app. Enterprise customers with a branded Guardian SDK build must surface their own install link outside the component. - Passkeys + Passkeys Educational screen → OS biometric prompt → enrolled entry in the list - Requires Apple Associated Domains (iOS 16.6+) or Digital Asset Links (Android 14+). See the dedicated page for app-side platform setup. + Requires Apple Associated Domains (iOS 16.6+). See the dedicated page for app-side platform setup. Recovery codes @@ -67,9 +67,6 @@ Enable the factors you want on the Auth0 tenant; the component automatically sho - - - ### Getting started Place the `MyAccountAuthMethodsView()` component anywhere in your SwiftUI hierarchy, typically behind a settings navigation link. @@ -108,7 +105,7 @@ The `MyAccountAuthMethodsView` component has a no-argument initializer. Its beha `.auth0Theme(_:)` `Auth0Theme` - Override design tokens — colors, typography, spacing, radius, sizes. To learn about token references, read Customize Style and Themes. + Override design tokens — colors, typography, spacing, radius, sizes. To learn about token references, read Customize Style and Themes. `.embeddedInNavigationStack()` @@ -124,7 +121,7 @@ The `MyAccountAuthMethodsView` component has a no-argument initializer. Its beha ### Customization -Theming is applied to the component as a whole; individual factor screens inherit the active theme. +Theming is applied to the component as a whole; individual factor screens inherit the active theme. Pass a custom `Auth0Theme` to override design tokens across every screen the component renders. @@ -139,11 +136,11 @@ MyAccountAuthMethodsView() ) ) ``` -For the full token catalog and dark-mode patterns, read [Customize Style and Themes](/docs/get-started/universal-components/native/native-theming). +For the full token catalog and dark-mode patterns, read [Customize Style and Themes](/docs/get-started/universal-components/ios/ios-theming). ### Advanced Embed in a host NavigationStack -By default the `MyAccountAuthMethodsView` component manages its own `NavigationStack`. +By default the `MyAccountAuthMethodsView` component manages its own `NavigationStack`. If your application already owns a navigation stack, nesting a second stack breaks back-button behavior and swipe-to-go-back gestures. Auth0 recommends to embed the `MyAccountAuthMethodsView` component into your stack instead. @@ -185,116 +182,22 @@ The SDK also exposes a `Router` helper class for applications that want a type-s The iOS SDK does not currently ship localized strings. User facing copy is presented in English. If localization is a blocker for your integration, file a feature request against the [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) SDK. - - - - -### Getting started - -Use the `AuthenticatorSettingsComponent()` from any composable. The SDK handles all internal navigation between enrollment, verification, and management screens. - -```kotlin LoginSecurityScreen.kt -import androidx.compose.runtime.Composable -import com.auth0.universalcomponents.presentation.ui.mfa.AuthenticatorSettingsComponent - -@Composable -fun LoginSecurityScreen() { - AuthenticatorSettingsComponent() -} -``` - -### Parameters - - - - - - - - - - - - - - - - - - - - - - -
ParameterTypeDefaultPurpose
modifierModifierModifierStandard Compose modifier.
themeConfigurationAuth0ThemeConfigurationAuth0ThemeConfiguration.DefaultOverride design tokens — colors, typography, shapes, dimensions, sizes. See Customize Style and Themes.
- -### Customization - -Theming is applied to the component as a whole; individual factor screens inherit the active theme. - -Use a custom `Auth0ThemeConfiguration` to override design tokens across every screen the component renders. - -```kotlin -AuthenticatorSettingsComponent( - themeConfiguration = Auth0ThemeConfiguration( - color = Auth0Color.light().copy( - backgroundPrimary = Color(0xFF0066CC), - textOnPrimary = Color.White - ) - ) -) -``` - -For the full token catalog and dark-mode patterns, read [Customize Style and Themes](/docs/get-started/universal-components/native/native-theming). - -### Advanced compose NavHost integration - -The `AuthenticatorSettingsComponent` participates in Compose's `NavHost` when present and does not need special wiring. Use it as any other composable, if it is a destination in your `NavHost`, back-navigation defers to the host's `NavController`. - -```kotlin -@Composable -fun AccountNavGraph(navController: NavHostController) { - NavHost(navController, startDestination = "settings") { - composable("settings") { SettingsScreen(navController) } - composable("auth-methods") { AuthenticatorSettingsComponent() } - } -} -``` - -Internally, the SDK manages its own nested navigation between enrollment, verification, and management screens. That internal graph is isolated from your application's `NavController`, so no naming collisions can occur. - -### Localization - -All user facing strings live in the SDK's `values/strings.xml` file. You can override any string in your application by redefining the same key in your own `values/strings.xml` file: - -```text - - Next - -``` - -Your resource value shadows the SDK default at build time. -To ship localized copies, you can provide translated `values-/strings.xml` files that use the same keys. - -
-
- ## Limitations * **No standalone factor components on iOS**. Every factor renders inside the Auth Methods Management component. There is no public API to enroll, verify, or remove a single factor from a different part of your application. -* **No standalone list/remove components**. Neither SDK ships public components for listing enrolled factors or removing them outside the component. Use the Auth methods component for the full management experience. -* **Post-login passkey prompts are not supported**. Prompting a user to save a passkey immediately after sign-in (separate from the settings screen) is not covered by this SDK today. You can track [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) and [universal-components-android](https://github.com/auth0/universal-components-android/issues) for updates. +* **No standalone list/remove components**. The SDK does not ship public components for listing enrolled factors or removing them outside the component. Use the Auth methods component for the full management experience. +* **Post-login passkey prompts are not supported**. Prompting a user to save a passkey immediately after sign-in (separate from the settings screen) is not covered by this SDK today. You can track [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) for updates. ## Learn more - + Initialize the SDK and wire the token provider to your Auth0 tenant. - + Override colors, typography, spacing, radius, and size tokens using the Auth0 design-token system. - \ No newline at end of file +
diff --git a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx new file mode 100644 index 0000000000..3ca322e8af --- /dev/null +++ b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx @@ -0,0 +1,120 @@ +--- +title: Passkeys on iOS +description: SDK-specific behavior, app-side entitlements, and customization for the Passkey factor rendered inside the Auth Methods Management component on iOS. +sidebarTitle: Passkeys +--- + +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + + +The [Auth Methods Management](/docs/get-started/universal-components/ios/components/auth-methods-management) component renders the [Passkey](/docs/authenticate/database-connections/passkeys) enrollment flow, an educational screen, a WebAuthn registration handshake with the platform authenticator, and the enrolled-factor entry in the authenticator list. + +Unlike other factors, passkeys require application-side platform entitlements that the SDK cannot configure. This page covers the platform entitlements and SDK configuration specific to passkeys on iOS. + +## Prerequisites + +1. **Enable passkeys on your Auth0 database connection** + + Read [Passkeys](/docs/authenticate/database-connections/passkeys) to enable it in your Auth0 tenant. + +2. **Complete the Universal Components setup** + + Read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK. Set `PasskeysConfiguration` on the SDK initializer if your integration needs a specific connection or linked identity. + +3. **Complete the platform level application setup** + + Unlike other factors, passkeys requires your application to prove ownership of the Auth0 domain at the OS level. Follow the [Platform setup](#platform-setup) steps to configure. + +## Platform setup + +Passkeys bind to the relying party domain Auth0 issues credentials for, typically your Auth0 tenant domain or [custom domain](/docs/customize/custom-domains). The platform verifies this binding through Apple Associated Domains. + +1. **Add the Associated Domains entitlement** + + In **Xcode**, open your target's **Signing & Capabilities** and add **Associated Domains**. Add the entry: + + ```text + webcredentials:YOUR_AUTH0_DOMAIN + ``` + + For example: `webcredentials:your-tenant.auth0.com`. If you use a custom domain, use that instead. + +2. **Register your application bundle ID in the Auth0 Dashboard** + + A. Navigate to **Auth0 Dashboard → Authentication → Database** + B. Select the **Database Connections** + C. Select the **Passkey settings** tab + D. Add your application bundle ID in the **Allowed iOS Applications** + + Auth0 publishes the `apple-app-site-association` file at `/.well-known/apple-app-site-association` on your domain automatically and includes every registered bundle ID. + +3. **Minimum iOS version** + + The Auth Methods Management component hides the Passkey option on devices running **iOS < 16.6**, **macOS < 13.5**, or **visionOS < 1.0**. + + +Apple's [Supporting associated domains](https://developer.apple.com/documentation/xcode/supporting-associated-domains) guide is the authoritative reference for entitlements and the AASA file. Validate your AASA with the [AASA Validator](https://app-site-association.cdn-apple.com/) before testing on-device. + + + +## Customization + +The Passkey educational and status screens inherit the component's active theme. The biometric prompt itself is rendered by the OS and cannot be themed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
TokenEffect on Passkey screens
`background.accent`Accent color for the passkey educational illustration
`background.primary`Add Passkey button background
`text.onPrimary`Add Passkey button label
`text.bold`Headline and explainer copy
`radius.button`Button corner radius
+ +For the full token, read [Customize Style and Themes](/docs/get-started/universal-components/ios/ios-theming). + +### SDK Limitations + +* **Passkeys can only be enrolled from inside the Auth Methods Management component**. There is no public SwiftUI API to trigger a standalone passkey enrollment from elsewhere in your app. Post-login "save a passkey" upsell prompts are not supported today. You can track [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) for updates. + +* **Removing a passkey in the component does not purge the OS credential store**. The enrolled passkey detaches from the Auth0 account, but the private credential remains in iCloud Keychain until the user removes it from the OS-level credential manager. + +* **Attestation conveyance is not surfaced**. The SDK does not let the caller select attestation policy (`none` / `indirect` / `direct`) or enumerate authenticator transports — it uses the Auth0 tenant's configured WebAuthn policy. + +## Learn more + + + + + Auth Methods Management component reference and the full list of supported factors. + + + + Initialize the SDK and wire the token provider to your Auth0 tenant. + + + diff --git a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx new file mode 100644 index 0000000000..1c05789cae --- /dev/null +++ b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx @@ -0,0 +1,181 @@ +--- +title: Build a Self-Service Account Security Interface with My Account API on iOS +description: "Describes how to use Universal Components to build self-service account security interfaces with Auth0's My Account API on iOS." +sidebarTitle: Build Account Security UI +--- + +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + + +Universal Components allows you to build a self-service account security UI within your native iOS application. +This enables your users to manage their own authentication methods, such as MFA factors, passkeys, and recovery codes directly inside your application, without leaving for a web browser or contacting support. + +## How it works +Universal Components leverage the [My Account API](/docs/manage-users/my-account-api), which operates using user scoped tokens, to render an authentication-methods management UI inside your application. + +When an authenticated user opens their account settings screen, the [Auth0.swift](https://github.com/auth0/Auth0.swift) SDK retrieves an Access Token scoped to the My Account API audience. + +Universal Components use this token to call the API as the logged in user, ensuring each user can only modify their own authentication methods. + + +My Account components are used to create **end-user self-service** interfaces. +For **delegated admin** UI where a user manages an Auth0 Organization, read [Build a Delegated Admin Interface](/docs/get-started/universal-components/web/components/build-delegated-admin). + + +### Available components + +Each component leverages the [My Account API](/docs/api/myaccount) and covers one or more authentication methods. + +| **Component** | **API endpoint** | +| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------ | +| **Auth Methods Management** — `MyAccountAuthMethodsView`. Enrolls, lists, and removes every authentication method on the user's account: Email OTP, SMS OTP, TOTP (Authenticator app), Push via Auth0 Guardian, Passkeys, and Recovery Codes. | `/me/v1/authentication-methods` | + +## Configure My Account Components using the Auth0 Dashboard + +To use My Account components, you need to configure your Auth0 tenant with the proper [APIs](/docs/api/myaccount), [applications](/docs/get-started/applications), and [scopes](/docs/get-started/applications/application-access-to-apis-client-grants). + +### Enable the My Account API + +1. Navigate to [Dashboard > Applications > APIs](https://manage.auth0.com/#/apis). +2. Select **Activate My Account API** to and ensure it is enabled for your tenant. + +### Create an Application and configure My Account API scopes + +1. Navigate to [Dashboard > Applications](https://manage.auth0.com/#/applications). +2. Select **Create Application**. +3. Select **Native**. +4. In the **Settings** tab, add the callback URL in the **Allowed Callback URLs**: `https://YOUR_AUTH0_DOMAIN://YOUR_BUNDLE_ID/ios/YOUR_BUNDLE_ID/callback`. +5. Add your logout URLs in the **Allowed Logout URLs**. +6. Select the **API Access Tab**. +7. Select **Edit** for the **Auth0 My Account API** to select the User delegated Access permissions: + +### Configure scopes + +Request the scopes your app needs from the My Account API when obtaining the user's access token. + + + ``` + create:me:authentication_methods + read:me:authentication_methods + update:me:authentication_methods + delete:me:authentication_methods + ``` + + + +The user's token only includes permissions they were granted during login. Request all four scopes if you want users to enroll, review, and remove authentication methods. + + +### Configure passkeys (optional) + +You can skip this step if you are not enabling passkey enrollment. + +1. Navigate to [Dashboard > Authentication > Database](https://manage.auth0.com/#/connections/database). Open the database connection you want passkeys enabled on. +2. Under **Passkey settings**, toggle **Require Passkey Enrollment** as needed for your policy. +3. Register your iOS application bundle ID under **Allowed iOS Applications** so the platform authenticator can issue credentials for your Auth0 tenant. + +Auth0 publishes the platform association file (`apple-app-site-association`) on your tenant domain automatically. + + +Passkeys require custom domains to be enabled in your tenant. + + +## Configure your application + +### Install the SDK + +To install the `Auth0UniversalComponents` use the Swift Package Manager, CocoaPods, or Carthage. For installation details and requirements, read [Auth0 Universal Components for iOS](/docs/get-started/universal-components/ios/ios-overview). + +### Initialize the SDK + +To initialize the SDK call the `Auth0UniversalComponentsSDKInitializer.initialize(...)` once at application start, typically in your application struct's `init`. If your application already uses `Auth0.plist` to configure Auth0.swift, add `ClientId`, `Domain`, and `Audience` keys and call: + + ```swift App.swift theme={null} + import SwiftUI + import Auth0 + import Auth0UniversalComponents + + @main + struct MyApp: App { + init() { + Auth0UniversalComponentsSDKInitializer.initialize( + tokenProvider: CredentialsManager(authentication: Auth0.authentication()) + ) + } + + var body: some Scene { + WindowGroup { ContentView() } + } + } + ``` + +Or pass the values directly in code: + + ```swift App.swift theme={null} + Auth0UniversalComponentsSDKInitializer.initialize( + domain: "YOUR_AUTH0_DOMAIN", + clientId: "YOUR_CLIENT_ID", + audience: "https://YOUR_AUTH0_DOMAIN/me/", + tokenProvider: CredentialsManager(authentication: Auth0.authentication()) + ) + ``` +### Configure the token provider + +The `TokenProvider` protocol is how the SDK asks your application for credentials. +Auth0 recommends to use the `Auth0.swift's CredentialsManager` for production integrations and avoid hand-rolling a custom implementation unless you have storage requirements that `Auth0.swift` doesn't meet. + + +If you manage credentials yourself, implement all four methods: + + ```swift theme={null} + struct AppTokenProvider: TokenProvider { + func fetchCredentials() async throws -> Credentials { + // Return the user's login credentials. + } + func storeCredentials(credentials: Credentials) { + // Persist new or refreshed credentials. + } + func store(apiCredentials: APICredentials, for audience: String) { + // Persist My Account API credentials keyed by audience. + } + func fetchAPICredentials(audience: String, scope: String) async throws -> APICredentials { + // Return cached My Account API credentials, refreshing if expired. + } + } + ``` + + +### Configure passkeys (optional) + +To configure [passkeys](/docs/authenticate/database-connections/passkeys) implement a `PasskeysConfiguration` to override default passkey behavior. All fields are optional. + + ```swift theme={null} + let passkeys = PasskeysConfiguration( + userIdentityId: "auth0|abc123", + connection: "Username-Password-Authentication" + ) + + Auth0UniversalComponentsSDKInitializer.initialize( + passkeyConfiguration: passkeys, + tokenProvider: credentialsManager + ) + ``` + +Add the Associated Domains entitlement to your Xcode target so the platform authenticator will issue credentials for your Auth0 tenant: + +``` + webcredentials:YOUR_AUTH0_DOMAIN +``` + + +Passkeys require iOS 16.6+, macOS 13.5+, or visionOS 1.0+. + + + + Users must be authenticated before you render any component. Once the SDK is initialized and your `TokenProvider` is wired up, drop the [Auth Methods Management](/docs/get-started/universal-components/ios/components/auth-methods-management) component into your settings screen to give users full MFA, passkey, and recovery-code self-service. + diff --git a/main/docs/get-started/universal-components/ios/ios-overview.mdx b/main/docs/get-started/universal-components/ios/ios-overview.mdx new file mode 100644 index 0000000000..209609e60c --- /dev/null +++ b/main/docs/get-started/universal-components/ios/ios-overview.mdx @@ -0,0 +1,98 @@ +--- +title: Auth0 Universal Components for iOS +description: Learn how to install and configure Auth0 Universal Components for iOS applications. +sidebarTitle: Configure Universal Components for iOS +--- + +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + + + +Auth0 Universal Components for [Native Applications](/docs/get-started/auth0-overview/create-applications/native-apps#register-native-applications) ships pre-built, embeddable UI for identity flows on iOS using [SwiftUI](https://developer.apple.com/swiftui). + +## Prerequisites + +To use Auth0 Universal Components for iOS: + +* Supported OS: **iOS 16.0+**, **macOS 13.0+**, **visionOS 1.0+**. +* Recommended Language: **Swift 5+** (6 Preferred), **Xcode 16+**. + + +Auth0 [Passkeys](/docs/authenticate/database-connections/passkeys) support requires **iOS 16.6+, macOS 13.5+,** or **visionOS 1.0+** for Apple platforms. + + +## Install the SDK + +The iOS SDK is distributed as [`Auth0UniversalComponents`](/docs/get-started/universal-components/universal-components-overview). +Auth0 recommends using the Swift Package Manager installer. + +### Swift Package Manager + +1. Use Xcode, select **File → Add Package Dependencies** and enter: + + ```text + https://github.com/auth0/ui-components-ios.git + ``` + +2. Select version `1.0.0-beta.0` or later, then add `Auth0UniversalComponents` to your application target. + +### CocoaPods + +1. Add the pod to your Podfile: + + ```ruby + pod 'Auth0UniversalComponents', '~> 1.0.0' + ``` +2. Then run: + + ```bash + pod install + ``` + + +**Known issue**: The 1.0.0 CocoaPods release omits bundled Media, Colors, and Fonts resources. If your UI renders without the expected styling, use the Swift Package Manager until the next podspec release. + + +### Carthage + +1. Add the following to your Cartfile: + + ```text + github "auth0/ui-components-ios" ~> 1.0.0 + ``` + +2. Then run: + + ```bash + carthage update --use-xcframeworks + ``` + +### Verify the installation + +Import the module in a Swift file to confirm the framework resolves: + +```swift +import Auth0UniversalComponents +``` + +### Sample application + +You can review the sample application `AppUIComponents` target in the [ui-components-ios GitHub repo](https://github.com/auth0/ui-components-ios) for a reference implementation. It includes `AppUIComponentsApp.swift` for SDK initialization and `Common/ThemeManager.swift` for runtime theme switching. + +Once the SDK is installed, you can continue to [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview) to wire authentication and render the `auth-methods` management UI. + +## Next steps + + + Override colors, typography, spacing, radius, and size tokens using the Auth0 design-token system. + + + + Prepare your Auth0 tenant, initialize the SDK, and render the auth-methods management UI. + + diff --git a/main/docs/get-started/universal-components/native-foundations/native-theming.mdx b/main/docs/get-started/universal-components/ios/ios-theming.mdx similarity index 61% rename from main/docs/get-started/universal-components/native-foundations/native-theming.mdx rename to main/docs/get-started/universal-components/ios/ios-theming.mdx index 550097344b..78ba2bd9ff 100644 --- a/main/docs/get-started/universal-components/native-foundations/native-theming.mdx +++ b/main/docs/get-started/universal-components/ios/ios-theming.mdx @@ -1,6 +1,6 @@ --- -title: Customize Style and Themes Universal Components for Native Applications -description: Learn how to customize style and themes for universal components for native applications. +title: Customize Style and Themes for iOS Universal Components +description: Learn how to customize style and themes for Universal Components on iOS. sidebarTitle: Customize Style and Themes --- @@ -12,16 +12,13 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -Auth0 Universal Components for Native Applications SDKs share a design token model. +Auth0 Universal Components for iOS uses a design token model. Every visual property, such as colors, typography, spacing, corner radii, and component sizes are expressed as a named `token` where you can override one value without rewriting layouts. The default theme renders the standard Auth0 style without any configuration, you only need to supply your own theme to match your brand. -## Customize style and themes - - - +## Customize style and themes The [iOS SDK](https://github.com/auth0/ui-components-ios) uses a SwiftUI `@Environment` based theme. You can wrap any SDK view using the `.auth0Theme(_:)`, so that every component using that modifier renders the injected `Auth0Theme` automatically. @@ -29,7 +26,7 @@ The [iOS SDK](https://github.com/auth0/ui-components-ios) uses a SwiftUI `@Envir If you do not configure a theme, the iOS SDK renders the default Auth0 theme: -```swift +```swift import SwiftUI import Auth0UniversalComponents @@ -45,7 +42,7 @@ struct ContentView: View { You can select which tokens to override, the iOS SDK will render every other token using the Auth0 default theme. -```swift +```swift import SwiftUI import Auth0UniversalComponents @@ -90,7 +87,7 @@ struct BrandBackground: Auth0BackgroundColorTokens { var layerMedium: Color { Color("Background/LayerMedium", bundle: .main) } var layerBase: Color { Color("Background/LayerBase", bundle: .main) } var error: Color { Color("Background/Error", bundle: .main) } - var errorSubtle: Color { Color("Background/ErrorSubtle", bundle: .main) } + var errorSubtle: Color { Color("Background/ErrorSubtle", bundle: .main).opacity(0.35) } var success: Color { Color("Background/Success", bundle: .main) } var successSubtle: Color { Color("Background/SuccessSubtle", bundle: .main) } } @@ -134,7 +131,7 @@ struct MyCustomStep: View { -Colors are split across three focused protocols, `Auth0BackgroundColorTokens`, `Auth0TextColorTokens`, and `Auth0BorderColorTokens` and aggregated into `Auth0ColorTokens`. +Colors are split across three focused protocols, `Auth0BackgroundColorTokens`, `Auth0TextColorTokens`, and `Auth0BorderColorTokens` and aggregated into `Auth0ColorTokens`. All color assets are adaptive, so light and dark modes are handled automatically by the asset catalog. @@ -165,7 +162,7 @@ All color assets are adaptive, so light and dark modes are handled automatically -#### Background layers +#### Background layers @@ -548,275 +545,15 @@ Spacing defaults to `4 pt` grid. Use the token name in design hand-offs to custo
-
- - - -The [Android SDK](https://github.com/auth0/ui-components-android) uses a Jetpack Compose theme that mirrors Material 3's MaterialTheme pattern. - -You can wrap SDK content using `Auth0Theme { ... }` to provide tokens, or pass `themeConfiguration` directly to `AuthenticatorSettingsComponent`. - -You can read tokens inside any composable using `Auth0Theme.colors`, `Auth0Theme.typography`, `Auth0Theme.shapes`, `Auth0Theme.dimensions`, and `Auth0Theme.sizes`. - -### Zero configuration - -If you do not configure a theme, the Android SDK renders the default Auth0 theme: - -```kotlin -@Composable -fun MFASettingsScreen() { - AuthenticatorSettingsComponent() -} -``` - -### Override a subset of tokens - -You can select which tokens to override using the `Auth0Color.light().copy(...)`, `Auth0Color.dark()`, or `Auth0Typography.default().copy(...)` tokens. - -```kotlin -@Composable -fun MFASettingsScreen() { - AuthenticatorSettingsComponent( - themeConfiguration = Auth0ThemeConfiguration( - color = Auth0Color.light().copy( - backgroundPrimary = Color(0xFFFF6B00), - textOnPrimary = Color.White - ) - ) - ) -} -``` - -### Force dark mode - -To force dark mode, you can wrap the component in `Auth0Theme(darkTheme = true)` or pass the dark color scheme explicitly: - -```kotlin -// Option 1: Force dark mode via Auth0Theme -@Composable -fun MFASettingsScreen() { - Auth0Theme(darkTheme = true) { - AuthenticatorSettingsComponent() - } -} - -// Option 2: Explicit dark color scheme -@Composable -fun MFASettingsScreen() { - AuthenticatorSettingsComponent( - themeConfiguration = Auth0ThemeConfiguration( - color = Auth0Color.dark() - ) - ) -} -``` - -### Configure a full brand theme - -You can configure for full brand alignment by combining colors, typography, and shapes for complete brand control using `Auth0ThemeConfiguration()` : - -```kotlin -fun MFASettingsScreen() { - AuthenticatorSettingsComponent( - themeConfiguration = Auth0ThemeConfiguration( - color = Auth0Color.light().copy( - backgroundPrimary = Color(0xFF0066CC), - textOnPrimary = Color.White, - backgroundLayerBase = Color(0xFFF5F5F5), - backgroundLayerMedium = Color.White, - textBold = Color(0xFF1F1F1F), - textDefault = Color(0xFF636363), - backgroundError = Color(0xFFFF4444), - backgroundSuccess = Color(0xFF00CC66), - borderDefault = Color(0xFFE0E0E0) - ), - typography = Auth0Typography.default().copy( - displayMedium = TextStyle(fontSize = 22.sp, fontWeight = FontWeight.Bold), - body = TextStyle(fontSize = 18.sp) - ), - shapes = Auth0Shapes( - none = RoundedCornerShape(0.dp), - extraSmall = RoundedCornerShape(4.dp), - small = RoundedCornerShape(8.dp), - medium = RoundedCornerShape(12.dp), - large = RoundedCornerShape(16.dp), - extraLarge = RoundedCornerShape(24.dp), - full = RoundedCornerShape(100.dp) - ) - ) - ) -} -``` - -### Read theme tokens in your own composables - -You can read theme tokens in an `Auth0Theme{ ... }` composable using the accessor object: - -```kotlin -@Composable -fun CustomAuthCard() { - Card( - shape = Auth0Theme.shapes.medium, - colors = CardDefaults.cardColors( - containerColor = Auth0Theme.colors.backgroundLayerMedium - ) - ) { - Column(modifier = Modifier.padding(Auth0Theme.dimensions.spacingMd)) { - Text( - text = "Authenticator", - style = Auth0Theme.typography.title, - color = Auth0Theme.colors.textBold - ) - Text( - text = "Enabled", - style = Auth0Theme.typography.bodySmall, - color = Auth0Theme.colors.textDefault - ) - } - } -} -``` - -### Switch themes at runtime - -You can keep the theme configuration in state to swap between light and dark (or brand variants) without recreating the screen: - -```kotlin -@Composable -fun MFASettingsScreen() { - var isDarkMode by remember { mutableStateOf(false) } - - val themeConfig = Auth0ThemeConfiguration( - color = if (isDarkMode) Auth0Color.dark() else Auth0Color.light() - ) - - Column { - Switch(checked = isDarkMode, onCheckedChange = { isDarkMode = it }) - AuthenticatorSettingsComponent(themeConfiguration = themeConfig) - } -} -``` - -### Token reference - - - -To customize colors use `Auth0Color.light()` and `Auth0Color.dark()` factories as starting points and `.copy(...)` to override specific tokens. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TokenUsage
`backgroundPrimary`, `backgroundPrimarySubtle`, `backgroundInverse`, `backgroundAccent`CTA and accent surfaces
`backgroundLayerTop`, `backgroundLayerMedium`, `backgroundLayerBase`Overlay / card / app-background layers
`backgroundError`, `backgroundErrorSubtle`, `backgroundSuccess`, `backgroundSuccessSubtle`Feedback surfaces
`borderBold`, `borderDefault`, `borderSubtle`, `borderShadow`Emphasis and elevation borders
`textBold`, `textDefault`, `textSubtle`Heading / body / caption text
`textOnPrimary`, `textOnInverse`, `textError`, `textSuccess`, `textAccent`Text on colored surfaces
-
- - - -To customize typography use the compose token `TextStyle`. You can override it with `Auth0Typography.default().copy(...)`. - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TokenUsage
`displayMedium`, `display`Hero / major screen headings
`titleLarge`, `title`Screen titles, in-content titles
`body`, `bodySmall`Descriptions, body copy, footnotes
`label`Button labels, form field labels
`helper`, `overline`Captions, helper text, category labels
- -
- - - - - - - - - - - - - - - - - - - - - - -
TokenUsage
`none`No rounding
`extraSmall`, `small`, `medium`, `large`, `extraLarge`Standard rounding scale
`full`Fully rounded (pill)
-
- - - -You can use `Auth0Theme.dimensions.*` to configure spacing values on a `4 dp` grid: `spacingXxs`, `spacingXs`, `spacingSm`, `spacingMd`, `spacingLg`, `spacingXl`, `spacingXxl`, `spacingXxxl`. - - - - -You can use `Auth0Theme.sizes.*` to configure component dimensions: `buttonHeight`, `inputHeight`, icon sizes, OTP cell dimensions. - -
- -
## Learn more - - Platform prerequisites and installation for iOS and Android. + + Platform prerequisites and installation for iOS. - + Initialize the SDK and wire the token provider to your Auth0 tenant. diff --git a/main/docs/get-started/universal-components/universal-components-overview.mdx b/main/docs/get-started/universal-components/universal-components-overview.mdx index bb21dc3a26..3a477917bb 100644 --- a/main/docs/get-started/universal-components/universal-components-overview.mdx +++ b/main/docs/get-started/universal-components/universal-components-overview.mdx @@ -138,7 +138,7 @@ Use CSS variables to customize your branding: } ``` -To learn more, read [Style Universal Components](/docs/get-started/universal-components/webfoundations/universal-components-style). +To learn more, read [Style Universal Components](/docs/get-started/universal-components/web/universal-components-style). @@ -235,7 +235,7 @@ Use CSS variables to customize your branding: } ``` -To learn more, read [Style Universal Components](/docs/get-started/universal-components/webfoundations/universal-components-style). +To learn more, read [Style Universal Components](/docs/get-started/universal-components/web/universal-components-style). @@ -333,7 +333,7 @@ Use CSS variables to customize your branding: } ``` -To learn more, read [Customize Style and Themes with Universal Components](/docs/get-started/universal-components/webfoundations/universal-components-style). +To learn more, read [Customize Style and Themes with Universal Components](/docs/get-started/universal-components/web/universal-components-style). @@ -371,5 +371,5 @@ See complete working examples in the sample applications. ## Learn more -- [Configure Auth0ComponentProvider](/docs/get-started/universal-components/webfoundations/auth0-component-provider) -- [Customize Style and Themes with Universal Components](/docs/get-started/universal-components/webfoundations/universal-components-style) +- [Configure Auth0ComponentProvider](/docs/get-started/universal-components/web/auth0-component-provider) +- [Customize Style and Themes with Universal Components](/docs/get-started/universal-components/web/universal-components-style) diff --git a/main/docs/get-started/universal-components/webfoundations/auth0-component-provider.mdx b/main/docs/get-started/universal-components/web/auth0-component-provider.mdx similarity index 99% rename from main/docs/get-started/universal-components/webfoundations/auth0-component-provider.mdx rename to main/docs/get-started/universal-components/web/auth0-component-provider.mdx index 533bb2f0a2..8169ab3a08 100644 --- a/main/docs/get-started/universal-components/webfoundations/auth0-component-provider.mdx +++ b/main/docs/get-started/universal-components/web/auth0-component-provider.mdx @@ -268,7 +268,7 @@ Use the following properties to align the Universal Components with your applica For detailed styling examples and customization patterns, read the [Customize Style and Themes with Universal - Components](/docs/get-started/universal-components/webfoundations/universal-components-style). + Components](/docs/get-started/universal-components/web/universal-components-style). --- @@ -773,7 +773,7 @@ Fine-tune TanStack Query caching for every Auth0 component. Defaults keep data f For detailed styling examples and customization patterns, read the [Customize Style and Themes with Universal - Components](/docs/get-started/universal-components/webfoundations/universal-components-style). + Components](/docs/get-started/universal-components/web/universal-components-style). --- @@ -1211,7 +1211,7 @@ All custom methods are optional. Only implement the ones you need. Methods recei For detailed styling examples and customization patterns, read the [Customize Style and Themes with Universal - Components](/docs/get-started/universal-components/webfoundations/universal-components-style). + Components](/docs/get-started/universal-components/web/universal-components-style). --- diff --git a/main/docs/get-started/universal-components/my-organization/build-delegated-admin.mdx b/main/docs/get-started/universal-components/web/components/build-delegated-admin.mdx similarity index 100% rename from main/docs/get-started/universal-components/my-organization/build-delegated-admin.mdx rename to main/docs/get-started/universal-components/web/components/build-delegated-admin.mdx diff --git a/main/docs/get-started/universal-components/my-organization/domain-management/configure-org-domains.mdx b/main/docs/get-started/universal-components/web/components/configure-org-domains.mdx similarity index 99% rename from main/docs/get-started/universal-components/my-organization/domain-management/configure-org-domains.mdx rename to main/docs/get-started/universal-components/web/components/configure-org-domains.mdx index 49692d0772..43a6ad0020 100644 --- a/main/docs/get-started/universal-components/my-organization/domain-management/configure-org-domains.mdx +++ b/main/docs/get-started/universal-components/web/components/configure-org-domains.mdx @@ -22,7 +22,7 @@ The `DomainTable` component provides a unified interface for your customers to m **Auth0 Configuration Required** - Ensure your tenant is configured with the My Organization API. [View setup guide - →](/docs/get-started/universal-components/my-organization/build-delegated-admin#enable-the-my-organization-api) + →](/docs/get-started/universal-components/web/components/build-delegated-admin#enable-the-my-organization-api) ## Install the component @@ -512,7 +512,7 @@ These hooks provide the underlying logic without any UI. Use them to build compl **Auth0 Configuration Required** - Ensure your tenant is configured with the My Organization API. [View setup guide - →](/docs/get-started/universal-components/my-organization/build-delegated-admin#configure-auth0-dashboard) + →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) ## Install component @@ -1192,7 +1192,7 @@ These hooks provide the underlying logic without any UI. Use them to build compl **Auth0 Configuration Required** - Ensure your tenant is configured with the My Organization API. [View setup guide - →](/docs/get-started/universal-components/my-organization/build-delegated-admin#configure-auth0-dashboard) + →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) ## Install the component diff --git a/main/docs/get-started/universal-components/my-organization/organization-management/edit-organization-details.mdx b/main/docs/get-started/universal-components/web/components/edit-organization-details.mdx similarity index 99% rename from main/docs/get-started/universal-components/my-organization/organization-management/edit-organization-details.mdx rename to main/docs/get-started/universal-components/web/components/edit-organization-details.mdx index 59423172c4..a44bdb30a9 100644 --- a/main/docs/get-started/universal-components/my-organization/organization-management/edit-organization-details.mdx +++ b/main/docs/get-started/universal-components/web/components/edit-organization-details.mdx @@ -22,7 +22,7 @@ The `OrganizationDetailsEdit` component provides a unified interface to edit you **Auth0 Configuration Required** - Ensure your tenant is configured with the My Organization API. [View setup guide - →](/docs/get-started/universal-components/my-organization/build-delegated-admin#enable-the-my-organization-api) + →](/docs/get-started/universal-components/web/components/build-delegated-admin#enable-the-my-organization-api) ## Installation @@ -608,7 +608,7 @@ These hooks provide the underlying logic without any UI. Use them to build compl **Auth0 Configuration Required** - Ensure your tenant is configured with the My Organization API. [View setup guide - →](/docs/get-started/universal-components/my-organization/build-delegated-admin#configure-auth0-dashboard) + →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) ## Installation @@ -1174,7 +1174,7 @@ These hooks provide the underlying logic without any UI. Use them to build compl **Auth0 Configuration Required** - Ensure your tenant is configured with the My Organization API. [View setup guide - →](/docs/get-started/universal-components/my-organization/build-delegated-admin#configure-auth0-dashboard) + →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) ## Installation diff --git a/main/docs/get-started/universal-components/my-organization/idp-management/sso-provider-create.mdx b/main/docs/get-started/universal-components/web/components/sso-provider-create.mdx similarity index 98% rename from main/docs/get-started/universal-components/my-organization/idp-management/sso-provider-create.mdx rename to main/docs/get-started/universal-components/web/components/sso-provider-create.mdx index eb78d93aed..459a0bc3d0 100644 --- a/main/docs/get-started/universal-components/my-organization/idp-management/sso-provider-create.mdx +++ b/main/docs/get-started/universal-components/web/components/sso-provider-create.mdx @@ -22,7 +22,7 @@ The `SsoProviderCreate` component provides a unified interface to add new [Singl **Auth0 Configuration Required** - Ensure your tenant is configured with the My Organization API. [View setup guide - →](/docs/get-started/universal-components/my-organization/build-delegated-admin#enable-the-my-organization-api) + →](/docs/get-started/universal-components/web/components/build-delegated-admin#enable-the-my-organization-api) ## Installation @@ -137,7 +137,7 @@ export default function App() { **Auth0 Configuration Required** - Ensure your tenant is configured with the My Organization API. [View setup guide - →](/docs/get-started/universal-components/my-organization/build-delegated-admin#configure-auth0-dashboard) + →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) ## Installation @@ -234,7 +234,7 @@ export default CreateSsoProviderPage; **Auth0 Configuration Required** - Ensure your tenant is configured with the My Organization API. [View setup guide - →](/docs/get-started/universal-components/my-organization/build-delegated-admin#configure-auth0-dashboard) + →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) ## Installation diff --git a/main/docs/get-started/universal-components/my-organization/idp-management/sso-provider-edit.mdx b/main/docs/get-started/universal-components/web/components/sso-provider-edit.mdx similarity index 99% rename from main/docs/get-started/universal-components/my-organization/idp-management/sso-provider-edit.mdx rename to main/docs/get-started/universal-components/web/components/sso-provider-edit.mdx index 74b3e9d961..a9d30b1f54 100644 --- a/main/docs/get-started/universal-components/my-organization/idp-management/sso-provider-edit.mdx +++ b/main/docs/get-started/universal-components/web/components/sso-provider-edit.mdx @@ -22,7 +22,7 @@ The `SsoProviderEdit` component provides a unified interface to edit [Single Sig **Auth0 Configuration Required** - Ensure your tenant is configured with the My Organization API. [View setup guide - →](/docs/get-started/universal-components/my-organization/build-delegated-admin#enable-the-my-organization-api) + →](/docs/get-started/universal-components/web/components/build-delegated-admin#enable-the-my-organization-api) ## Installation @@ -1056,7 +1056,7 @@ These hooks provide the underlying logic without any UI. Use them to build compl **Auth0 Configuration Required** - Ensure your tenant is configured with the My Organization API. [View setup guide - →](/docs/get-started/universal-components/my-organization/build-delegated-admin#configure-auth0-dashboard) + →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) ## Installation @@ -2071,7 +2071,7 @@ These hooks provide the underlying logic without any UI. Use them to build compl **Auth0 Configuration Required** - Ensure your tenant is configured with the My Organization API. [View setup guide - →](/docs/get-started/universal-components/my-organization/build-delegated-admin#configure-auth0-dashboard) + →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) ## Installation diff --git a/main/docs/get-started/universal-components/my-organization/idp-management/sso-provider-table.mdx b/main/docs/get-started/universal-components/web/components/sso-provider-table.mdx similarity index 99% rename from main/docs/get-started/universal-components/my-organization/idp-management/sso-provider-table.mdx rename to main/docs/get-started/universal-components/web/components/sso-provider-table.mdx index b2848dc849..ee94dbad5d 100644 --- a/main/docs/get-started/universal-components/my-organization/idp-management/sso-provider-table.mdx +++ b/main/docs/get-started/universal-components/web/components/sso-provider-table.mdx @@ -22,7 +22,7 @@ import { ComponentLoader } from "/snippets/ComponentLoader.jsx"; **Auth0 Configuration Required** - Ensure your tenant is configured with the My Organization API. [View setup guide - →](/docs/get-started/universal-components/my-organization/build-delegated-admin#enable-the-my-organization-api) + →](/docs/get-started/universal-components/web/components/build-delegated-admin#enable-the-my-organization-api) ## Installation @@ -743,7 +743,7 @@ These hooks provide the underlying logic without any UI. Use them to build compl **Auth0 Configuration Required** - Ensure your tenant is configured with the My Organization API. [View setup guide - →](/docs/get-started/universal-components/my-organization/build-delegated-admin#configure-auth0-dashboard) + →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) ## Installation @@ -1445,7 +1445,7 @@ These hooks provide the underlying logic without any UI. Use them to build compl **Auth0 Configuration Required** - Ensure your tenant is configured with the My Organization API. [View setup guide - →](/docs/get-started/universal-components/my-organization/build-delegated-admin#configure-auth0-dashboard) + →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) ## Installation diff --git a/main/docs/get-started/universal-components/webfoundations/universal-components-style.mdx b/main/docs/get-started/universal-components/web/universal-components-style.mdx similarity index 99% rename from main/docs/get-started/universal-components/webfoundations/universal-components-style.mdx rename to main/docs/get-started/universal-components/web/universal-components-style.mdx index 55ec856491..2b4fab223f 100644 --- a/main/docs/get-started/universal-components/webfoundations/universal-components-style.mdx +++ b/main/docs/get-started/universal-components/web/universal-components-style.mdx @@ -11,7 +11,7 @@ sidebarTitle: Customize Style and Themes Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). -Auth0 Universal Components are built on a flexible design system utilizes [Tailwind CSS](https://tailwindcss.com/docs/installation/using-vite) and [Radix UI primitives](https://www.radix-ui.com/primitives/docs/overview/introduction). Styling is orchestrated through the [`Auth0ComponentProvider`](/docs/get-started/universal-components/webfoundations/auth0-component-provider) to allow you to choose between high-level presets or fine-grained CSS variable overrides. +Auth0 Universal Components are built on a flexible design system utilizes [Tailwind CSS](https://tailwindcss.com/docs/installation/using-vite) and [Radix UI primitives](https://www.radix-ui.com/primitives/docs/overview/introduction). Styling is orchestrated through the [`Auth0ComponentProvider`](/docs/get-started/universal-components/web/auth0-component-provider) to allow you to choose between high-level presets or fine-grained CSS variable overrides. This architecture ensures that your identity flows look and feel like native parts of your application. From 2d094221883b4f190fe27296b196d3dd665e32b3 Mon Sep 17 00:00:00 2001 From: Suraj Thotakura Date: Tue, 26 May 2026 14:18:20 +0530 Subject: [PATCH 06/50] fix: remove cocoa pods reference from iOS docs --- .../ios/components/my-account-overview.mdx | 2 +- .../universal-components/ios/ios-overview.mdx | 17 ----------------- 2 files changed, 1 insertion(+), 18 deletions(-) diff --git a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx index 1c05789cae..f3bf44985a 100644 --- a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx @@ -89,7 +89,7 @@ Passkeys require custom domains to be enabled in your tenant. ### Install the SDK -To install the `Auth0UniversalComponents` use the Swift Package Manager, CocoaPods, or Carthage. For installation details and requirements, read [Auth0 Universal Components for iOS](/docs/get-started/universal-components/ios/ios-overview). +To install the `Auth0UniversalComponents` use the Swift Package Manager or Carthage. For installation details and requirements, read [Auth0 Universal Components for iOS](/docs/get-started/universal-components/ios/ios-overview). ### Initialize the SDK diff --git a/main/docs/get-started/universal-components/ios/ios-overview.mdx b/main/docs/get-started/universal-components/ios/ios-overview.mdx index 209609e60c..60e40d1ce8 100644 --- a/main/docs/get-started/universal-components/ios/ios-overview.mdx +++ b/main/docs/get-started/universal-components/ios/ios-overview.mdx @@ -41,23 +41,6 @@ Auth0 recommends using the Swift Package Manager installer. 2. Select version `1.0.0-beta.0` or later, then add `Auth0UniversalComponents` to your application target. -### CocoaPods - -1. Add the pod to your Podfile: - - ```ruby - pod 'Auth0UniversalComponents', '~> 1.0.0' - ``` -2. Then run: - - ```bash - pod install - ``` - - -**Known issue**: The 1.0.0 CocoaPods release omits bundled Media, Colors, and Fonts resources. If your UI renders without the expected styling, use the Swift Package Manager until the next podspec release. - - ### Carthage 1. Add the following to your Cartfile: From 509dcce78e82cc6a3086014651ee8db93e8066bd Mon Sep 17 00:00:00 2001 From: Suraj Thotakura Date: Tue, 26 May 2026 14:21:36 +0530 Subject: [PATCH 07/50] fix: update android docs with the new parameter and use the updated API --- .../android/components/my-account-overview.mdx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx index 075577a404..ae60477e69 100644 --- a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx @@ -123,6 +123,7 @@ To initialize the SDK use the `Auth0UniversalComponents.initialize(...)` method super.onCreate(savedInstanceState) Auth0UniversalComponents.initialize( + context = context, account = account, tokenProvider = DefaultTokenProvider(credentialsManager), scheme = getString(R.string.com_auth0_scheme) @@ -175,6 +176,7 @@ Use the `PasskeyConfiguration` to customize how the SDK enrolls passkeys through ) Auth0UniversalComponents.initialize( + context = context, account = account, tokenProvider = DefaultTokenProvider(credentialsManager), scheme = getString(R.string.com_auth0_scheme), From 85eeccfe03eb8356db382ede35ec19caa34599ce Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 26 May 2026 15:54:44 +0200 Subject: [PATCH 08/50] Update navigation and sidebartitles --- main/config/navigation/universal-components.json | 6 +++--- .../universal-components/android/android-overview.mdx | 2 +- .../get-started/universal-components/ios/ios-overview.mdx | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/main/config/navigation/universal-components.json b/main/config/navigation/universal-components.json index 5970c12e16..4a26b0176e 100644 --- a/main/config/navigation/universal-components.json +++ b/main/config/navigation/universal-components.json @@ -7,7 +7,7 @@ ] }, { - "group": "Web", + "group": "Web Components", "icon": "globe", "pages": [ "docs/get-started/universal-components/web/auth0-component-provider", @@ -31,7 +31,7 @@ ] }, { - "group": "iOS", + "group": "iOS Components", "icon": "apple", "pages": [ "docs/get-started/universal-components/ios/ios-overview", @@ -52,7 +52,7 @@ ] }, { - "group": "Android", + "group": "Android Components", "icon": "android", "pages": [ "docs/get-started/universal-components/android/android-overview", diff --git a/main/docs/get-started/universal-components/android/android-overview.mdx b/main/docs/get-started/universal-components/android/android-overview.mdx index 25ed4e3a63..0c7e11cf4a 100644 --- a/main/docs/get-started/universal-components/android/android-overview.mdx +++ b/main/docs/get-started/universal-components/android/android-overview.mdx @@ -1,7 +1,7 @@ --- title: Auth0 Universal Components for Android description: Learn how to install and configure Auth0 Universal Components for Android applications. -sidebarTitle: Configure Universal Components for Android +sidebarTitle: Install and Configure Universal Components for Android --- import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" diff --git a/main/docs/get-started/universal-components/ios/ios-overview.mdx b/main/docs/get-started/universal-components/ios/ios-overview.mdx index 60e40d1ce8..83c8ba3858 100644 --- a/main/docs/get-started/universal-components/ios/ios-overview.mdx +++ b/main/docs/get-started/universal-components/ios/ios-overview.mdx @@ -1,7 +1,7 @@ --- title: Auth0 Universal Components for iOS description: Learn how to install and configure Auth0 Universal Components for iOS applications. -sidebarTitle: Configure Universal Components for iOS +sidebarTitle: Install and Configure Universal Components for iOS --- import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" From 5adbbbdffeec9616faf0b04393ca1accc8dbc7e5 Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 26 May 2026 17:28:07 +0200 Subject: [PATCH 09/50] update title --- .../universal-components/android/android-overview.mdx | 4 ++-- .../get-started/universal-components/ios/ios-overview.mdx | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/main/docs/get-started/universal-components/android/android-overview.mdx b/main/docs/get-started/universal-components/android/android-overview.mdx index 0c7e11cf4a..0c013591a8 100644 --- a/main/docs/get-started/universal-components/android/android-overview.mdx +++ b/main/docs/get-started/universal-components/android/android-overview.mdx @@ -1,7 +1,7 @@ --- -title: Auth0 Universal Components for Android +title: Universal Components for Android applications description: Learn how to install and configure Auth0 Universal Components for Android applications. -sidebarTitle: Install and Configure Universal Components for Android +sidebarTitle: Install and Configure Universal Components --- import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" diff --git a/main/docs/get-started/universal-components/ios/ios-overview.mdx b/main/docs/get-started/universal-components/ios/ios-overview.mdx index 83c8ba3858..c7f6bc34a3 100644 --- a/main/docs/get-started/universal-components/ios/ios-overview.mdx +++ b/main/docs/get-started/universal-components/ios/ios-overview.mdx @@ -1,7 +1,7 @@ --- -title: Auth0 Universal Components for iOS +title: Universal Components for iOS applications description: Learn how to install and configure Auth0 Universal Components for iOS applications. -sidebarTitle: Install and Configure Universal Components for iOS +sidebarTitle: Install and Configure Universal Components --- import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" From ccf9c8583d7cd70c58303e37e756e277639e832c Mon Sep 17 00:00:00 2001 From: Carlos Date: Thu, 28 May 2026 15:27:13 +0200 Subject: [PATCH 10/50] update to iOS docs --- .../universal-components/ios/ios-overview.mdx | 45 +- .../universal-components/ios/ios-theming.mdx | 484 ++++-------------- 2 files changed, 122 insertions(+), 407 deletions(-) diff --git a/main/docs/get-started/universal-components/ios/ios-overview.mdx b/main/docs/get-started/universal-components/ios/ios-overview.mdx index c7f6bc34a3..7daea453b4 100644 --- a/main/docs/get-started/universal-components/ios/ios-overview.mdx +++ b/main/docs/get-started/universal-components/ios/ios-overview.mdx @@ -13,61 +13,70 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" /> -Auth0 Universal Components for [Native Applications](/docs/get-started/auth0-overview/create-applications/native-apps#register-native-applications) ships pre-built, embeddable UI for identity flows on iOS using [SwiftUI](https://developer.apple.com/swiftui). +Auth0 [Universal Components for iOS](https://github.com/auth0/ui-components-ios) provide pre-built, embeddable UI for identity flows using [SwiftUI](https://developer.apple.com/swiftui). + +These components are built on top of the [Auth0 Swift SDK](https://github.com/auth0/Auth0.swift) and integrate with the [My Account APIs](/docs/manage-users/my-account-api). ## Prerequisites -To use Auth0 Universal Components for iOS: +To use Universal Components for iOS, you need: -* Supported OS: **iOS 16.0+**, **macOS 13.0+**, **visionOS 1.0+**. -* Recommended Language: **Swift 5+** (6 Preferred), **Xcode 16+**. +* Operating systems: `iOS 16.0+`, `macOS 13.0+`, `visionOS 1.0+` +* Programming language: `Swift 5+` (6 preferred), `Xcode 16+` -Auth0 [Passkeys](/docs/authenticate/database-connections/passkeys) support requires **iOS 16.6+, macOS 13.5+,** or **visionOS 1.0+** for Apple platforms. +Auth0 [Passkeys](/docs/authenticate/database-connections/passkeys) support requires operating systems: **iOS 16.6+, macOS 13.5+,** or **visionOS 1.0+**. ## Install the SDK -The iOS SDK is distributed as [`Auth0UniversalComponents`](/docs/get-started/universal-components/universal-components-overview). -Auth0 recommends using the Swift Package Manager installer. +Universal Components for iOS are distributed as the [`Auth0UniversalComponents`](/docs/get-started/universal-components/universal-components-overview) package. Use the Swift Package Manager to install the SDK. ### Swift Package Manager -1. Use Xcode, select **File → Add Package Dependencies** and enter: +1. In Xcode, navigate to **File > Add Package Dependencies**. +2. Enter the following repository URL: - ```text + ```text wrap lines https://github.com/auth0/ui-components-ios.git ``` -2. Select version `1.0.0-beta.0` or later, then add `Auth0UniversalComponents` to your application target. +3. Select version `1.0.0-beta.0` or later. +4. Add `Auth0UniversalComponents` to your application target. ### Carthage +If you use the [Carthage](https://github.com/Carthage/Carthage) dependency manager: + 1. Add the following to your Cartfile: - ```text + ```text wrap lines github "auth0/ui-components-ios" ~> 1.0.0 ``` -2. Then run: +2. Run the following command: - ```bash + ```bash wrap lines carthage update --use-xcframeworks ``` ### Verify the installation -Import the module in a Swift file to confirm the framework resolves: +Import the `Auth0UniversalComponents` module in a Swift file to confirm the framework resolves: -```swift +```swift wrap lines import Auth0UniversalComponents ``` -### Sample application +To continue, read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview) to wire authentication and render the [Authentication Methods Management](/docs/manage-users/my-account-api#manage-authentication-methods) UI. + +## Sample application + +Review the sample application `AppUIComponents` in the [Universal Components for iOS](https://github.com/auth0/ui-components-ios/tree/main/AppUIComponents) GitHub repository. + +The sample application includes `AppUIComponentsApp.swift` for Auth0 Swift SDK initialization and `Common/ThemeManager.swift` for runtime theme switching. -You can review the sample application `AppUIComponents` target in the [ui-components-ios GitHub repo](https://github.com/auth0/ui-components-ios) for a reference implementation. It includes `AppUIComponentsApp.swift` for SDK initialization and `Common/ThemeManager.swift` for runtime theme switching. -Once the SDK is installed, you can continue to [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview) to wire authentication and render the `auth-methods` management UI. ## Next steps diff --git a/main/docs/get-started/universal-components/ios/ios-theming.mdx b/main/docs/get-started/universal-components/ios/ios-theming.mdx index 78ba2bd9ff..c1ba88ddaa 100644 --- a/main/docs/get-started/universal-components/ios/ios-theming.mdx +++ b/main/docs/get-started/universal-components/ios/ios-theming.mdx @@ -12,21 +12,19 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -Auth0 Universal Components for iOS uses a design token model. +Auth0 Universal Components for iOS use a design token model. Every visual property—colors, typography, spacing, corner radii, and component sizes—is expressed as a named token that you can override without rewriting layouts. -Every visual property, such as colors, typography, spacing, corner radii, and component sizes are expressed as a named `token` where you can override one value without rewriting layouts. +The default theme renders the standard Auth0 style without any configuration. Provide your own theme to match your brand. -The default theme renders the standard Auth0 style without any configuration, you only need to supply your own theme to match your brand. +## How theming works -## Customize style and themes - -The [iOS SDK](https://github.com/auth0/ui-components-ios) uses a SwiftUI `@Environment` based theme. You can wrap any SDK view using the `.auth0Theme(_:)`, so that every component using that modifier renders the injected `Auth0Theme` automatically. +[Universal Components for iOS](https://github.com/auth0/ui-components-ios) use a SwiftUI `@Environment`-based theme. Apply the `.auth0Theme(_:)` modifier to any SwiftUI view. Every child component renders the injected `Auth0Theme` automatically. ### Zero configuration -If you do not configure a theme, the iOS SDK renders the default Auth0 theme: +If you do not configure a theme, Universal Components for iOS render the default Auth0 theme. The following example displays the account methods view without any customization: -```swift +```swift wrap lines import SwiftUI import Auth0UniversalComponents @@ -39,10 +37,9 @@ struct ContentView: View { ### Override a subset of tokens -You can select which tokens to override, the iOS SDK will render every other token using the Auth0 default theme. - +You can override specific tokens while Universal Components for iOS render every other token using the Auth0 default theme. The following example overrides only the primary background and text colors: -```swift +```swift wrap lines import SwiftUI import Auth0UniversalComponents @@ -61,9 +58,9 @@ struct ContentView: View { } ``` -The same shape applies to typography, spacing, radius, and sizes. For example: +The same shape applies to typography, spacing, radius, and sizes. The following example overrides typography and button radius: -```swift +```swift wrap lines Auth0Theme( typography: DefaultAuth0TypographyTokens( body: Auth0TextStyle(font: .custom("Lato-Regular", size: 17), tracking: 0, lineSpacing: 7), @@ -75,9 +72,9 @@ Auth0Theme( ### Configure a full brand theme -You can configure for full brand alignment, by providing your own brand theme that implements the three color category protocols and wire them into an `Auth0ColorTokens` container: +For full brand alignment, provide your own theme that implements the three color category protocols and wire them into an `Auth0ColorTokens` container: -```swift +```swift wrap lines struct BrandBackground: Auth0BackgroundColorTokens { var primary: Color { Color("Background/Primary", bundle: .main) } var primarySubtle: Color { Color("Background/Primary", bundle: .main).opacity(0.35) } @@ -104,9 +101,9 @@ MyAccountAuthMethodsView() ### Read the theme in your own views -Use `@Environment(\.auth0Theme)` to consume the same tokens in any view you build alongside the SDK: +Access `@Environment(\.auth0Theme)` to apply the same tokens in any view you build alongside the SDK: -```swift +```swift wrap lines struct MyCustomStep: View { @Environment(\.auth0Theme) private var theme @@ -131,419 +128,128 @@ struct MyCustomStep: View { -Colors are split across three focused protocols, `Auth0BackgroundColorTokens`, `Auth0TextColorTokens`, and `Auth0BorderColorTokens` and aggregated into `Auth0ColorTokens`. +Colors are split across three focused protocols: `Auth0BackgroundColorTokens`, `Auth0TextColorTokens`, and `Auth0BorderColorTokens`. These are aggregated into `Auth0ColorTokens`. -All color assets are adaptive, so light and dark modes are handled automatically by the asset catalog. +All color assets are adaptive. The asset catalog handles light and dark mode automatically. #### Background primary - - - - - - - - - - - - - - - - - - - - - - - -
TokenUsage
`background.primary`CTA button background, primary borders
`background.primarySubtle`Low-emphasis primary background
`background.inverse`Contrast-flipped background
`background.accent`Branded or featured UI highlight
+| **Token** | **Usage** | +|-----------|-----------| +| `background.primary` | CTA button background, primary borders | +| `background.primarySubtle` | Low-emphasis primary background | +| `background.inverse` | Contrast-flipped background | +| `background.accent` | Branded or featured UI highlight | #### Background layers - - - - - - - - - - - - - - - - - - - -
TokenUsage
`background.layerTop`Overlays and modals
`background.layerMedium`Cards and raised containers
`background.layerBase`Main app background
+| **Token** | **Usage** | +|-----------|-----------| +| `background.layerTop` | Overlays and modals | +| `background.layerMedium` | Cards and raised containers | +| `background.layerBase` | Main app background | #### Background feedback - - - - - - - - - - - - - - - - - - - - - - - -
TokenUsage
`background.error`Error state container
`background.errorSubtle`Subtle error banner
`background.success`Success state container
`background.successSubtle`Subtle success banner
+| **Token** | **Usage** | +|-----------|-----------| +| `background.error` | Error state container | +| `background.errorSubtle` | Subtle error banner | +| `background.success` | Success state container | +| `background.successSubtle` | Subtle success banner | #### Text content - - - - - - - - - - - - - - - - - - - -
TokenUsage
`text.bold`Headings and primary body text
`text.regular`Secondary copy, descriptions, captions
`text.disabled`Disabled and placeholder text
+| **Token** | **Usage** | +|-----------|-----------| +| `text.bold` | Headings and primary body text | +| `text.regular` | Secondary copy, descriptions, captions | +| `text.disabled` | Disabled and placeholder text | #### Text on color surfaces - - - - - - - - - - - - - - - - - - - -
TokenUsage
`text.onPrimary`Text and icons on `background.primary`
`text.onSuccess`Text and icons on `background.success`
`text.onError`Text and icons on `background.error`, validation messages
+| **Token** | **Usage** | +|-----------|-----------| +| `text.onPrimary` | Text and icons on `background.primary` | +| `text.onSuccess` | Text and icons on `background.success` | +| `text.onError` | Text and icons on `background.error`, validation messages | #### Border - - - - - - - - - - - - - - - - - - - - - - - -
TokenUsage
`border.bold`High-contrast or selected borders
`border.regular`Input field and card borders
`border.subtle`Delicate dividers
`border.shadow`Elevation shadow border
+| **Token** | **Usage** | +|-----------|-----------| +| `border.bold` | High-contrast or selected borders | +| `border.regular` | Input field and card borders | +| `border.subtle` | Delicate dividers | +| `border.shadow` | Elevation shadow border | +
-Each token is an `Auth0TextStyle` bundling `font`, `tracking`, and `lineSpacing`. You can apply them using the `.auth0TextStyle(_:)` view modifier. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TokenTypefaceSizeWeightLine heightTrackingUsage
`displayLarge`Inter34 ptSemiBold41 pt−0.20 ptHero headings, passkey enrollment
`displayMedium`Inter28 ptSemiBold34 pt−0.10 ptMajor screen titles, error headings
`display`Inter22 ptSemiBold28 pt−0.05 ptSection-level headings
`titleLarge`Inter20 ptSemiBold25 pt0 ptScreen titles, subheading cards
`title`Inter17 ptSemiBold24 pt0 ptIn-content titles
`body`Inter17 ptRegular24 pt0 ptDescriptions, body copy
`bodySmall`Inter15 ptRegular20 pt+0.10 ptSecondary body copy, footnotes
`label`Inter16 ptMedium21 pt+0.10 ptButton labels, form field labels
`helper`Inter13 ptRegular18 pt+0.20 ptCaptions, helper text
`overline`Inter11 ptRegular16 pt+0.77 ptOverline and category labels
+Each token is an `Auth0TextStyle` bundling `font`, `tracking`, and `lineSpacing`. Apply them using the `.auth0TextStyle(_:)` view modifier. + +| **Token** | **Typeface** | **Size** | **Weight** | **Line height** | **Tracking** | **Usage** | +|-----------|-------------|---------|-----------|----------------|-------------|-----------| +| `displayLarge` | Inter | 34 pt | SemiBold | 41 pt | −0.20 pt | Hero headings, passkey enrollment | +| `displayMedium` | Inter | 28 pt | SemiBold | 34 pt | −0.10 pt | Major screen titles, error headings | +| `display` | Inter | 22 pt | SemiBold | 28 pt | −0.05 pt | Section-level headings | +| `titleLarge` | Inter | 20 pt | SemiBold | 25 pt | 0 pt | Screen titles, subheading cards | +| `title` | Inter | 17 pt | SemiBold | 24 pt | 0 pt | In-content titles | +| `body` | Inter | 17 pt | Regular | 24 pt | 0 pt | Descriptions, body copy | +| `bodySmall` | Inter | 15 pt | Regular | 20 pt | +0.10 pt | Secondary body copy, footnotes | +| `label` | Inter | 16 pt | Medium | 21 pt | +0.10 pt | Button labels, form field labels | +| `helper` | Inter | 13 pt | Regular | 18 pt | +0.20 pt | Captions, helper text | +| `overline` | Inter | 11 pt | Regular | 16 pt | +0.77 pt | Overline and category labels | -If typeface `Inter` is not bundled in the host app, SwiftUI uses the `SF Pro` typeface automatically. +If typeface `Inter` is not bundled in the host application, SwiftUI uses the `SF Pro` typeface automatically.
-Spacing defaults to `4 pt` grid. Use the token name in design hand-offs to customize spacing, not the raw pixel value. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TokenDefaultDescription
`xxs`4 ptMinimal gap between tightly coupled elements
`xs`8 ptSmall gap between grouped elements
`sm`12 ptMedium internal padding
`md`16 ptStandard component and container padding
`lg`24 ptLarger padding for major sections
`xl`32 ptExtra-large padding
`xxl`48 ptDouble-extra-large padding
`xxxl`56 ptTriple-extra-large padding
+Spacing defaults to a `4 pt` grid. Use the token name in design hand-offs to customize spacing, not the raw pixel value. + +| **Token** | **Default** | **Description** | +|-----------|------------|-----------------| +| `xxs` | 4 pt | Minimal gap between tightly coupled elements | +| `xs` | 8 pt | Small gap between grouped elements | +| `sm` | 12 pt | Medium internal padding | +| `md` | 16 pt | Standard component and container padding | +| `lg` | 24 pt | Larger padding for major sections | +| `xl` | 32 pt | Extra-large padding | +| `xxl` | 48 pt | Double-extra-large padding | +| `xxxl` | 56 pt | Triple-extra-large padding |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TokenDefaultUsage
`small`8 ptSingle character-input cells (OTP, PIN digits)
`medium`12 ptBanner and feedback cards
`inputField`14 ptText inputs, code display containers
`button`16 ptCTA buttons, auth-method cards
`pill`24 ptPill-shaped outline buttons
+| **Token** | **Default** | **Usage** | +|-----------|------------|-----------| +| `small` | 8 pt | Single character-input cells (OTP, PIN digits) | +| `medium` | 12 pt | Banner and feedback cards | +| `inputField` | 14 pt | Text inputs, code display containers | +| `button` | 16 pt | CTA buttons, auth-method cards | +| `pill` | 24 pt | Pill-shaped outline buttons |
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TokenDefaultUsage
buttonHeight48 ptAll primary and secondary action buttons
inputHeight60 ptText and phone-number input fields
size4xlDimen48 ptWidth of a single character-input cell
size5xlDimen56 ptHeight of a single character-input cell
containerSizeLargeDimen52 ptHeight of a read-only code display container
iconSmall16 ptSmall icons — chevrons, info indicators, checkmarks
iconMedium24 ptStandard icons — authentication-method images
iconLarge28 ptLarge icons — three-dots menu
+| **Token** | **Default** | **Usage** | +|-----------|------------|-----------| +| `buttonHeight` | 48 pt | All primary and secondary action buttons | +| `inputHeight` | 60 pt | Text and phone-number input fields | +| `size4xlDimen` | 48 pt | Width of a single character-input cell | +| `size5xlDimen` | 56 pt | Height of a single character-input cell | +| `containerSizeLargeDimen` | 52 pt | Height of a read-only code display container | +| `iconSmall` | 16 pt | Small icons—chevrons, info indicators, checkmarks | +| `iconMedium` | 24 pt | Standard icons—authentication-method images | +| `iconLarge` | 28 pt | Large icons—three-dots menu | +
## Learn more From 1fbe4eecef177f545c301931ae9aaf33ad8952fb Mon Sep 17 00:00:00 2001 From: Carlos Date: Thu, 28 May 2026 15:54:30 +0200 Subject: [PATCH 11/50] fix: apply style guide fixes to ios-theming.mdx Fix subject-verb disagreements, remove unnecessary backticks on generic nouns, use imperative mood, and clean up trailing spaces. Co-Authored-By: Claude Opus 4.7 --- .../universal-components/ios/ios-theming.mdx | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/main/docs/get-started/universal-components/ios/ios-theming.mdx b/main/docs/get-started/universal-components/ios/ios-theming.mdx index c1ba88ddaa..de5a4c088f 100644 --- a/main/docs/get-started/universal-components/ios/ios-theming.mdx +++ b/main/docs/get-started/universal-components/ios/ios-theming.mdx @@ -12,13 +12,13 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -Auth0 Universal Components for iOS use a design token model. Every visual property—colors, typography, spacing, corner radii, and component sizes—is expressed as a named token that you can override without rewriting layouts. +Auth0 [Universal Components for iOS](https://github.com/auth0/ui-components-ios) use a design token model. Every visual property—colors, typography, spacing, corner radii, and component sizes—is expressed as a token that you can override without rewriting layouts. -The default theme renders the standard Auth0 style without any configuration. Provide your own theme to match your brand. +The default theme renders the standard Auth0 style without any configuration. You can provide your own theme to match your brand. ## How theming works -[Universal Components for iOS](https://github.com/auth0/ui-components-ios) use a SwiftUI `@Environment`-based theme. Apply the `.auth0Theme(_:)` modifier to any SwiftUI view. Every child component renders the injected `Auth0Theme` automatically. +Universal Components for iOS use a SwiftUI `@Environment` property wrapper theme. Apply the `.auth0Theme(_:)` modifier to any SwiftUI view. Every child component renders the injected `Auth0Theme` automatically. ### Zero configuration @@ -37,7 +37,9 @@ struct ContentView: View { ### Override a subset of tokens -You can override specific tokens while Universal Components for iOS render every other token using the Auth0 default theme. The following example overrides only the primary background and text colors: +You can override specific tokens while Universal Components for iOS render every other token using the Auth0 default theme. + +The following example overrides only the primary background and text colors: ```swift wrap lines import SwiftUI @@ -58,7 +60,9 @@ struct ContentView: View { } ``` -The same shape applies to typography, spacing, radius, and sizes. The following example overrides typography and button radius: +The same shape applies to typography, spacing, radius, and size tokens. + +The following example overrides typography and button radius: ```swift wrap lines Auth0Theme( @@ -72,7 +76,7 @@ Auth0Theme( ### Configure a full brand theme -For full brand alignment, provide your own theme that implements the three color category protocols and wire them into an `Auth0ColorTokens` container: +For full brand alignment, provide your own theme that implements the three color category properties and wire them into an `Auth0ColorTokens` container: ```swift wrap lines struct BrandBackground: Auth0BackgroundColorTokens { @@ -101,7 +105,7 @@ MyAccountAuthMethodsView() ### Read the theme in your own views -Access `@Environment(\.auth0Theme)` to apply the same tokens in any view you build alongside the SDK: +Access `@Environment(\.auth0Theme)` to apply the same tokens in any Swift view: ```swift wrap lines struct MyCustomStep: View { @@ -128,7 +132,7 @@ struct MyCustomStep: View { -Colors are split across three focused protocols: `Auth0BackgroundColorTokens`, `Auth0TextColorTokens`, and `Auth0BorderColorTokens`. These are aggregated into `Auth0ColorTokens`. +Colors are split across three focused protocols: `Auth0BackgroundColorTokens`, `Auth0TextColorTokens`, and `Auth0BorderColorTokens`. These are aggregated into the `Auth0ColorTokens` protocol. All color assets are adaptive. The asset catalog handles light and dark mode automatically. From d94c9aebbcb60ca8877501aaea7586ea92f7386e Mon Sep 17 00:00:00 2001 From: Carlos Date: Thu, 28 May 2026 16:23:23 +0200 Subject: [PATCH 12/50] update --- .../docs/get-started/universal-components/ios/ios-theming.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/main/docs/get-started/universal-components/ios/ios-theming.mdx b/main/docs/get-started/universal-components/ios/ios-theming.mdx index de5a4c088f..3aa6ed59c2 100644 --- a/main/docs/get-started/universal-components/ios/ios-theming.mdx +++ b/main/docs/get-started/universal-components/ios/ios-theming.mdx @@ -12,7 +12,7 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -Auth0 [Universal Components for iOS](https://github.com/auth0/ui-components-ios) use a design token model. Every visual property—colors, typography, spacing, corner radii, and component sizes—is expressed as a token that you can override without rewriting layouts. +Auth0 [Universal Components for iOS](https://github.com/auth0/ui-components-ios) use a design token model. Every visual property, such as, colors, typography, spacing, corner radii, and component sizes are expressed as a token that you can override without rewriting layouts. The default theme renders the standard Auth0 style without any configuration. You can provide your own theme to match your brand. @@ -214,7 +214,7 @@ If typeface `Inter` is not bundled in the host application, SwiftUI uses the `SF -Spacing defaults to a `4 pt` grid. Use the token name in design hand-offs to customize spacing, not the raw pixel value. +Spacing defaults to a `4 pt` grid. Use the token name in design hand offs to customize spacing, not the raw pixel value. | **Token** | **Default** | **Description** | |-----------|------------|-----------------| From 9bcbe2d638c1446611314af5c6a1439fd92bc1f6 Mon Sep 17 00:00:00 2001 From: Carlos Date: Thu, 28 May 2026 18:10:54 +0200 Subject: [PATCH 13/50] Update --- .../components/auth-methods-management.mdx | 149 ++++++------------ .../ios/components/factors/passkeys.mdx | 27 ++-- 2 files changed, 67 insertions(+), 109 deletions(-) diff --git a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx index dbc482d1a1..173de83fb5 100644 --- a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx @@ -12,66 +12,36 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -The Auth Methods Management component renders a complete UI for managing a user's authentication methods. -It ships as `MyAccountAuthMethodsView` on iOS — a SwiftUI view that handles every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). You do not need to orchestrate navigation, call endpoints, or manage state. +{/* TODO: Update anchor once DOCS-5840 merges the #manage-authentication-methods section */} +Universal Components for iOS includes the `MyAccountAuthMethodsView` component, a SwiftUI view that handles every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). It uses the My Account API's [authentication methods management](/docs/manage-users/my-account-api#manage-authentication-methods) capabilities to render a complete UI for managing a user's authentication methods. + +With the `MyAccountAuthMethodsView` component, you do not need to orchestrate navigation, call endpoints, or manage state. ## Setup requirements -Before rendering this component, follow [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK with a token provider. -The component reads its configuration, token provider, and passkey settings from the initialized SDK singleton. +Before rendering the `MyAccountAuthMethodsView` component, follow [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK with a token provider. +The component reads its configuration, token provider, and passkey settings from the initialized SDK. ## Supported factors -The component handles every factor Auth0 supports through the My Account API. Each factor's screens inherit the component's active theme, read [Customize Style and Themes](/docs/get-started/universal-components/ios/ios-theming) for the full token catalog. - -Enable the factors you want on the Auth0 tenant; the component automatically shows and hides factors based on what the tenant exposes. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FactorWhat the component rendersSDK notes
Email OTPEmail input → 6-digit OTP verificationPlatform OTP autofill (iOS QuickType) works against the OTP field.
SMS OTPCountry-code picker + phone entry → 6-digit OTP verificationAutofill via the system keyboard works normally.
TOTP (Authenticator app)QR code with manual-entry key → 6-digit OTP verificationRenders the standard otpauth:// payload; no custom brand logo injection into the QR.
Push notificationsQR code for Auth0 Guardian scan → "waiting for approval" stateEnd users need the public Auth0 Guardian app. Enterprise customers with a branded Guardian SDK build must surface their own install link outside the component.
PasskeysEducational screen → OS biometric prompt → enrolled entry in the listRequires Apple Associated Domains (iOS 16.6+). See the dedicated page for app-side platform setup.
Recovery codesDisplay-once code list with copy action + "I've saved my codes" confirmationCodes are displayed to the user and never returned to the caller. Copy-to-clipboard uses the platform's standard clipboard API.
- -### Getting started - -Place the `MyAccountAuthMethodsView()` component anywhere in your SwiftUI hierarchy, typically behind a settings navigation link. - -```swift SettingsView.swift +The component handles every authentication method factor configured with the My Account API. Each factor's screens inherit the component's active theme. To learn more, read [Customize Style and Themes](/docs/get-started/universal-components/ios/ios-theming). + +| **Factor** | **What the component renders** | **SDK notes** | +|-----------|-------------------------------|--------------| +| [Email OTP](/docs/secure/multi-factor-authentication/configure-mfa-email) | Email input → 6-digit OTP verification | Platform OTP autofill (iOS QuickType) populates the OTP field automatically. | +| [SMS OTP](/docs/secure/multi-factor-authentication/configure-sms-notifications-for-mfa) | Country-code picker + phone entry → 6-digit OTP verification | Autofill via the system keyboard works normally. | +| [TOTP (Authenticator app)](/docs/secure/multi-factor-authentication/configure-otp) | QR code with manual-entry key → 6-digit OTP verification | Renders the standard `otpauth://` payload. No custom brand logo injection into the QR. | +| [Push notifications](/docs/secure/multi-factor-authentication/enable-push-notifications-for-mfa) | QR code for [Auth0 Guardian](/docs/secure/multi-factor-authentication/auth0-guardian) scan → "waiting for approval" state | End users need the public Auth0 Guardian application. Enterprise customers with a branded Guardian SDK build must surface their own install link outside the component. | +| [Passkeys](/docs/get-started/universal-components/ios/components/factors/passkeys) | Educational screen → OS biometric prompt → enrolled entry in the list | Requires Apple Associated Domains (`iOS 16.6+`). See the dedicated page for platform setup. | +| [Recovery codes](/docs/secure/multi-factor-authentication/configure-recovery-codes-for-mfa) | Display-once code list with copy action + "I've saved my codes" confirmation | Codes are displayed to the user and never returned to the caller. Copy-to-clipboard uses the platform's standard clipboard API. | + +## Get started + +Add the `MyAccountAuthMethodsView()` component anywhere in your SwiftUI hierarchy, typically behind a settings navigation link. + +```swift SettingsView.swift wrap lines import SwiftUI import Auth0UniversalComponents @@ -89,43 +59,21 @@ struct SettingsView: View { } ``` -The view takes no initializer parameters. All customization happens through SwiftUI view modifiers and environment values. - -### Parameters - -The `MyAccountAuthMethodsView` component has a no-argument initializer. Its behavior is customized through view modifiers and environment values. - - - - - - - - - - - - - - - - - - - - - - - - -
Modifier / environmentTypePurpose
`.auth0Theme(_:)``Auth0Theme`Override design tokens — colors, typography, spacing, radius, sizes. To learn about token references, read Customize Style and Themes.
`.embeddedInNavigationStack()`Mark the view as embedded in a host `NavigationStack` so the SDK pushes onto your stack instead of creating its own.
`\.hostNavigationPath``Binding&lt;NavigationPath&gt;`Environment binding the SDK uses to push destinations onto the host navigation stack. Required when you call .embeddedInNavigationStack().
- -### Customization -Theming is applied to the component as a whole; individual factor screens inherit the active theme. - -Pass a custom `Auth0Theme` to override design tokens across every screen the component renders. - -```swift +The view takes no initializer parameters. Customize behavior through SwiftUI view modifiers and environment values. + +## Parameters + +| **Modifier / environment** | **Type** | **Purpose** | +|---------------------------|----------|-------------| +| `.auth0Theme(_:)` | `Auth0Theme` | Override design tokens—colors, typography, spacing, radius, sizes. To learn more, read [Customize Style and Themes](/docs/get-started/universal-components/ios/ios-theming). | +| `.embeddedInNavigationStack()` | — | Mark the view as embedded in a host `NavigationStack` so the SDK pushes onto your stack instead of creating its own. | +| `\.hostNavigationPath` | `Binding` | Environment binding the SDK uses to push destinations onto the host navigation stack. Required when you call `.embeddedInNavigationStack()`. | + +## Customization + +Theming is applied to the component as a whole; individual factor screens inherit the active theme. Use a custom `Auth0Theme` to override design tokens across every screen the component renders: + +```swift wrap lines MyAccountAuthMethodsView() .auth0Theme( Auth0Theme( @@ -136,15 +84,18 @@ MyAccountAuthMethodsView() ) ) ``` -For the full token catalog and dark-mode patterns, read [Customize Style and Themes](/docs/get-started/universal-components/ios/ios-theming). -### Advanced Embed in a host NavigationStack +To learn more about the full token catalog and dark-mode patterns, read [Customize Style and Themes](/docs/get-started/universal-components/ios/ios-theming). -By default the `MyAccountAuthMethodsView` component manages its own `NavigationStack`. +## Embed in a host NavigationStack -If your application already owns a navigation stack, nesting a second stack breaks back-button behavior and swipe-to-go-back gestures. Auth0 recommends to embed the `MyAccountAuthMethodsView` component into your stack instead. +By default, the `MyAccountAuthMethodsView` component manages its own `NavigationStack`. + + +If your application already owns a navigation stack, nesting a second stack breaks back-button behavior and swipe-to-go-back gestures. Embed the `MyAccountAuthMethodsView` component into your stack instead. + -```swift +```swift wrap lines import SwiftUI import Auth0UniversalComponents @@ -170,17 +121,17 @@ struct AccountScreen: View { There are two requirements when using embedded mode: -1. Apply `.embeddedInNavigationStack()` to `MyAccountAuthMethodsView` so it skips creating an inner stack. +* Apply `.embeddedInNavigationStack()` to `MyAccountAuthMethodsView` so it skips creating an inner stack. -2. Add `\.hostNavigationPath` on the outer `NavigationStack` so the SDK knows which path binding to push onto. +* Add `\.hostNavigationPath` on the outer `NavigationStack` so the SDK knows which path binding to push onto. -The SDK also exposes a `Router` helper class for applications that want a type-safe navigation controller for their own routes. It is not required to drive the SDK's internal navigation only use it if you want to apply the same pattern to your application's screens. +The SDK also exposes a `Router` helper class for applications that want a type-safe navigation controller for their own routes. It is not required to drive the SDK's internal navigation. Only use it if you want to apply the same pattern to your application's screens. -### Localization +## Localization -The iOS SDK does not currently ship localized strings. User facing copy is presented in English. If localization is a blocker for your integration, file a feature request against the [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) SDK. +Universal Components for iOS do not currently ship localized strings. User-facing copy is presented in English. If localization is a blocker for your integration, submit a feature request in the [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) repository. ## Limitations diff --git a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx index 3ca322e8af..9173e9bd3c 100644 --- a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx @@ -12,27 +12,31 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -The [Auth Methods Management](/docs/get-started/universal-components/ios/components/auth-methods-management) component renders the [Passkey](/docs/authenticate/database-connections/passkeys) enrollment flow, an educational screen, a WebAuthn registration handshake with the platform authenticator, and the enrolled-factor entry in the authenticator list. +Universal Components for iOS's [`MyAccountAuthMethodsView`](/docs/get-started/universal-components/ios/components/auth-methods-management) component renders the Auth0 [Passkey](/docs/authenticate/database-connections/passkeys) enrollment flow. + +The passkey enrollent flow renders an educational screen, a WebAuthn registration handshake with the platform authenticator, and the enrolled-factor entry in the authenticator list. + +Unlike other factors, passkeys requires application-side platform entitlements that the Universal Components for iOS SDK can not configure. -Unlike other factors, passkeys require application-side platform entitlements that the SDK cannot configure. This page covers the platform entitlements and SDK configuration specific to passkeys on iOS. ## Prerequisites -1. **Enable passkeys on your Auth0 database connection** +To enable platform entitlements and specific Universal Components for iOS SDK configuration for passkeys support: + - Read [Passkeys](/docs/authenticate/database-connections/passkeys) to enable it in your Auth0 tenant. +* **Enable passkeys on your Auth0 database connection** -2. **Complete the Universal Components setup** + To learn more, read [Passkeys](/docs/authenticate/database-connections/passkeys) to enable it in your Auth0 tenant. - Read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK. Set `PasskeysConfiguration` on the SDK initializer if your integration needs a specific connection or linked identity. +* **Build the Universal Component** -3. **Complete the platform level application setup** + To install the Universal Component for iOS SDK, configure your Auth0 tenant, and initialize the SDK, read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview). + Configure the [`PasskeysConfiguration`](/docs/get-started/universal-components/ios/components/my-account-overview#configure-passkeys-optional-2), if your integration needs a specific connection or linked identity. - Unlike other factors, passkeys requires your application to prove ownership of the Auth0 domain at the OS level. Follow the [Platform setup](#platform-setup) steps to configure. ## Platform setup -Passkeys bind to the relying party domain Auth0 issues credentials for, typically your Auth0 tenant domain or [custom domain](/docs/customize/custom-domains). The platform verifies this binding through Apple Associated Domains. +Passkeys binds credentials to your Auth0 tenant domain or [custom domain](/docs/customize/custom-domains), to add your Apple associated domains: 1. **Add the Associated Domains entitlement** @@ -47,15 +51,18 @@ Passkeys bind to the relying party domain Auth0 issues credentials for, typicall 2. **Register your application bundle ID in the Auth0 Dashboard** A. Navigate to **Auth0 Dashboard → Authentication → Database** + B. Select the **Database Connections** + C. Select the **Passkey settings** tab + D. Add your application bundle ID in the **Allowed iOS Applications** Auth0 publishes the `apple-app-site-association` file at `/.well-known/apple-app-site-association` on your domain automatically and includes every registered bundle ID. 3. **Minimum iOS version** - The Auth Methods Management component hides the Passkey option on devices running **iOS < 16.6**, **macOS < 13.5**, or **visionOS < 1.0**. + Universal Components for iOS hides the Passkey option on devices running **iOS < 16.6**, **macOS < 13.5**, or **visionOS < 1.0**. Apple's [Supporting associated domains](https://developer.apple.com/documentation/xcode/supporting-associated-domains) guide is the authoritative reference for entitlements and the AASA file. Validate your AASA with the [AASA Validator](https://app-site-association.cdn-apple.com/) before testing on-device. From f5d9ed806c918dda8652c67dfb6ffb609aab536e Mon Sep 17 00:00:00 2001 From: Carlos Date: Fri, 29 May 2026 13:00:44 +0200 Subject: [PATCH 14/50] Update --- .../components/auth-methods-management.mdx | 2 +- .../ios/components/factors/passkeys.mdx | 35 ++++++++----------- .../ios/components/my-account-overview.mdx | 19 +++++----- 3 files changed, 24 insertions(+), 32 deletions(-) diff --git a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx index 173de83fb5..303c41d674 100644 --- a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx @@ -32,7 +32,7 @@ The component handles every authentication method factor configured with the My |-----------|-------------------------------|--------------| | [Email OTP](/docs/secure/multi-factor-authentication/configure-mfa-email) | Email input → 6-digit OTP verification | Platform OTP autofill (iOS QuickType) populates the OTP field automatically. | | [SMS OTP](/docs/secure/multi-factor-authentication/configure-sms-notifications-for-mfa) | Country-code picker + phone entry → 6-digit OTP verification | Autofill via the system keyboard works normally. | -| [TOTP (Authenticator app)](/docs/secure/multi-factor-authentication/configure-otp) | QR code with manual-entry key → 6-digit OTP verification | Renders the standard `otpauth://` payload. No custom brand logo injection into the QR. | +| [TOTP (Authenticator application)](/docs/secure/multi-factor-authentication/configure-otp) | QR code with manual-entry key → 6-digit OTP verification | Renders the standard `otpauth://` payload. No custom brand logo injection into the QR. | | [Push notifications](/docs/secure/multi-factor-authentication/enable-push-notifications-for-mfa) | QR code for [Auth0 Guardian](/docs/secure/multi-factor-authentication/auth0-guardian) scan → "waiting for approval" state | End users need the public Auth0 Guardian application. Enterprise customers with a branded Guardian SDK build must surface their own install link outside the component. | | [Passkeys](/docs/get-started/universal-components/ios/components/factors/passkeys) | Educational screen → OS biometric prompt → enrolled entry in the list | Requires Apple Associated Domains (`iOS 16.6+`). See the dedicated page for platform setup. | | [Recovery codes](/docs/secure/multi-factor-authentication/configure-recovery-codes-for-mfa) | Display-once code list with copy action + "I've saved my codes" confirmation | Codes are displayed to the user and never returned to the caller. Copy-to-clipboard uses the platform's standard clipboard API. | diff --git a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx index 9173e9bd3c..948903fe73 100644 --- a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx @@ -1,6 +1,6 @@ --- title: Passkeys on iOS -description: SDK-specific behavior, app-side entitlements, and customization for the Passkey factor rendered inside the Auth Methods Management component on iOS. +description: SDK-specific behavior, application side entitlements, and customization for the Passkey factor rendered inside the Auth Methods Management component on iOS. sidebarTitle: Passkeys --- @@ -16,7 +16,7 @@ Universal Components for iOS's [`MyAccountAuthMethodsView`](/docs/get-started/un The passkey enrollent flow renders an educational screen, a WebAuthn registration handshake with the platform authenticator, and the enrolled-factor entry in the authenticator list. -Unlike other factors, passkeys requires application-side platform entitlements that the Universal Components for iOS SDK can not configure. +Unlike other factors, passkeys requires application side platform entitlements that the Universal Components for iOS SDK can not configure. ## Prerequisites @@ -24,21 +24,18 @@ Unlike other factors, passkeys requires application-side platform entitlements t To enable platform entitlements and specific Universal Components for iOS SDK configuration for passkeys support: -* **Enable passkeys on your Auth0 database connection** +* **Enable passkeys on your Auth0 database connection**. To learn more, read [Passkeys](/docs/authenticate/database-connections/passkeys) to enable it in your Auth0 tenant. - To learn more, read [Passkeys](/docs/authenticate/database-connections/passkeys) to enable it in your Auth0 tenant. - -* **Build the Universal Component** - - To install the Universal Component for iOS SDK, configure your Auth0 tenant, and initialize the SDK, read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview). - Configure the [`PasskeysConfiguration`](/docs/get-started/universal-components/ios/components/my-account-overview#configure-passkeys-optional-2), if your integration needs a specific connection or linked identity. +* **Install and configure the Universal Component for iOS**. To install, configure your Auth0 tenant, and initialize the SDK, read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview). +Configure the optional [`PasskeysConfiguration`](/docs/get-started/universal-components/ios/components/my-account-overview#configure-passkeys-optional-2) component, if your integration needs a specific connection or linked identity. +* **Confirm OS version**. Universal Components for iOS hides the passkey option on devices running **iOS < 16.6**, **macOS < 13.5**, or **visionOS < 1.0**. ## Platform setup Passkeys binds credentials to your Auth0 tenant domain or [custom domain](/docs/customize/custom-domains), to add your Apple associated domains: -1. **Add the Associated Domains entitlement** +**Add the associated domains entitlement** In **Xcode**, open your target's **Signing & Capabilities** and add **Associated Domains**. Add the entry: @@ -46,9 +43,9 @@ Passkeys binds credentials to your Auth0 tenant domain or [custom domain](/docs/ webcredentials:YOUR_AUTH0_DOMAIN ``` - For example: `webcredentials:your-tenant.auth0.com`. If you use a custom domain, use that instead. + For example: `webcredentials:YOUR-TENANT.auth0.com`. If your tenant uses a custom domain, add your custom domain. -2. **Register your application bundle ID in the Auth0 Dashboard** +**Register your application bundle ID in the Auth0 Dashboard** A. Navigate to **Auth0 Dashboard → Authentication → Database** @@ -60,18 +57,14 @@ Passkeys binds credentials to your Auth0 tenant domain or [custom domain](/docs/ Auth0 publishes the `apple-app-site-association` file at `/.well-known/apple-app-site-association` on your domain automatically and includes every registered bundle ID. -3. **Minimum iOS version** - - Universal Components for iOS hides the Passkey option on devices running **iOS < 16.6**, **macOS < 13.5**, or **visionOS < 1.0**. - -Apple's [Supporting associated domains](https://developer.apple.com/documentation/xcode/supporting-associated-domains) guide is the authoritative reference for entitlements and the AASA file. Validate your AASA with the [AASA Validator](https://app-site-association.cdn-apple.com/) before testing on-device. +Apple's [supporting associated domains](https://developer.apple.com/documentation/xcode/supporting-associated-domains) guide is the authoritative reference for entitlements and the Apple App Site Association (AASA) file. Validate your AASA file with the [AASA Validator](https://app-site-association.cdn-apple.com/) before testing on-device. ## Customization -The Passkey educational and status screens inherit the component's active theme. The biometric prompt itself is rendered by the OS and cannot be themed. +The passkey educational and status screens inherit the component's active theme. The biometric prompt itself is rendered by the OS and cannot be themed. @@ -102,15 +95,15 @@ The Passkey educational and status screens inherit the component's active theme.
-For the full token, read [Customize Style and Themes](/docs/get-started/universal-components/ios/ios-theming). +To learn more about the full token catalog, read [Customize Style and Themes](/docs/get-started/universal-components/ios/ios-theming). ### SDK Limitations -* **Passkeys can only be enrolled from inside the Auth Methods Management component**. There is no public SwiftUI API to trigger a standalone passkey enrollment from elsewhere in your app. Post-login "save a passkey" upsell prompts are not supported today. You can track [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) for updates. +* **Passkeys can only be enrolled from inside the Auth Methods Management component**. There is no public SwiftUI API to trigger a standalone passkey enrollment from elsewhere in your application. Post-login "save a passkey" upsell prompts are not supported today. You can track [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) for updates. * **Removing a passkey in the component does not purge the OS credential store**. The enrolled passkey detaches from the Auth0 account, but the private credential remains in iCloud Keychain until the user removes it from the OS-level credential manager. -* **Attestation conveyance is not surfaced**. The SDK does not let the caller select attestation policy (`none` / `indirect` / `direct`) or enumerate authenticator transports — it uses the Auth0 tenant's configured WebAuthn policy. +* **Attestation conveyance is not surfaced**. The SDK does not let the caller select attestation policy (`none` / `indirect` / `direct`) or enumerate authenticator transports. It uses the Auth0 tenant's configured [WebAuthn](/docs/secure/multi-factor-authentication/webauthn-as-mfa#webauthn-as-multi-factor-authentication) policy. ## Learn more diff --git a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx index f3bf44985a..84fd31b04d 100644 --- a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx @@ -33,18 +33,16 @@ Each component leverages the [My Account API](/docs/api/myaccount) and covers on | **Component** | **API endpoint** | | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------ | -| **Auth Methods Management** — `MyAccountAuthMethodsView`. Enrolls, lists, and removes every authentication method on the user's account: Email OTP, SMS OTP, TOTP (Authenticator app), Push via Auth0 Guardian, Passkeys, and Recovery Codes. | `/me/v1/authentication-methods` | +| **Auth Methods Management** — `MyAccountAuthMethodsView`. Enrolls, lists, and removes every authentication method on the user's account: Email OTP, SMS OTP, TOTP (Authenticator application), Push via Auth0 Guardian, Passkeys, and Recovery Codes. | `/me/v1/authentication-methods` | -## Configure My Account Components using the Auth0 Dashboard - -To use My Account components, you need to configure your Auth0 tenant with the proper [APIs](/docs/api/myaccount), [applications](/docs/get-started/applications), and [scopes](/docs/get-started/applications/application-access-to-apis-client-grants). +## Configure My Account API using the Auth0 Dashboard ### Enable the My Account API 1. Navigate to [Dashboard > Applications > APIs](https://manage.auth0.com/#/apis). -2. Select **Activate My Account API** to and ensure it is enabled for your tenant. +2. Select **Activate My Account API** to enable it for your tenant. -### Create an Application and configure My Account API scopes +### Create an application and configure My Account API scopes 1. Navigate to [Dashboard > Applications](https://manage.auth0.com/#/applications). 2. Select **Create Application**. @@ -56,7 +54,7 @@ To use My Account components, you need to configure your Auth0 tenant with the p ### Configure scopes -Request the scopes your app needs from the My Account API when obtaining the user's access token. +Request the scopes your application needs from the My Account API when obtaining the user's access token. ``` @@ -68,7 +66,7 @@ Request the scopes your app needs from the My Account API when obtaining the use -The user's token only includes permissions they were granted during login. Request all four scopes if you want users to enroll, review, and remove authentication methods. +The user's access token only includes permissions they were granted during login. Request all four scopes if you want users to enroll, review, and remove authentication methods. ### Configure passkeys (optional) @@ -89,7 +87,7 @@ Passkeys require custom domains to be enabled in your tenant. ### Install the SDK -To install the `Auth0UniversalComponents` use the Swift Package Manager or Carthage. For installation details and requirements, read [Auth0 Universal Components for iOS](/docs/get-started/universal-components/ios/ios-overview). +To install the `Auth0UniversalComponents` universal component use the Swift Package Manager or Carthage. For installation details and requirements, read [Auth0 Universal Components for iOS](/docs/get-started/universal-components/ios/ios-overview). ### Initialize the SDK @@ -127,7 +125,8 @@ Or pass the values directly in code: ### Configure the token provider The `TokenProvider` protocol is how the SDK asks your application for credentials. -Auth0 recommends to use the `Auth0.swift's CredentialsManager` for production integrations and avoid hand-rolling a custom implementation unless you have storage requirements that `Auth0.swift` doesn't meet. + +Auth0 recommends to use the [`Auth0.swift`](https://github.com/auth0/Auth0.swift) `Auth0.swift's CredentialsManager` utility for production integrations and avoid creating a custom implementation, unless you have storage requirements that `Auth0.swift` SDK does not meet. If you manage credentials yourself, implement all four methods: From 07ecd5fd70506bcf32a2bdb313f8eff9a5184c21 Mon Sep 17 00:00:00 2001 From: Carlos Date: Fri, 29 May 2026 15:05:24 +0200 Subject: [PATCH 15/50] update --- .../ios/components/factors/passkeys.mdx | 6 +-- .../ios/components/my-account-overview.mdx | 39 +++++++++---------- 2 files changed, 22 insertions(+), 23 deletions(-) diff --git a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx index 948903fe73..6cdcafbeb8 100644 --- a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx @@ -33,7 +33,7 @@ Configure the optional [`PasskeysConfiguration`](/docs/get-started/universal-com ## Platform setup -Passkeys binds credentials to your Auth0 tenant domain or [custom domain](/docs/customize/custom-domains), to add your Apple associated domains: +Passkeys binds credentials to your Auth0 tenant [custom domain](/docs/customize/custom-domains), to add your Apple associated domains: **Add the associated domains entitlement** @@ -43,7 +43,7 @@ Passkeys binds credentials to your Auth0 tenant domain or [custom domain](/docs/ webcredentials:YOUR_AUTH0_DOMAIN ``` - For example: `webcredentials:YOUR-TENANT.auth0.com`. If your tenant uses a custom domain, add your custom domain. + For example: `webcredentials:YOUR-TENANT.auth0.com`. **Register your application bundle ID in the Auth0 Dashboard** @@ -103,7 +103,7 @@ To learn more about the full token catalog, read [Customize Style and Themes](/d * **Removing a passkey in the component does not purge the OS credential store**. The enrolled passkey detaches from the Auth0 account, but the private credential remains in iCloud Keychain until the user removes it from the OS-level credential manager. -* **Attestation conveyance is not surfaced**. The SDK does not let the caller select attestation policy (`none` / `indirect` / `direct`) or enumerate authenticator transports. It uses the Auth0 tenant's configured [WebAuthn](/docs/secure/multi-factor-authentication/webauthn-as-mfa#webauthn-as-multi-factor-authentication) policy. +* **Attestation conveyance is not surfaced**. The SDK does not allow to select the attestation policy (`none` / `indirect` / `direct`) or enumerate authenticator transports. It uses the Auth0 tenant's configured [WebAuthn](/docs/secure/multi-factor-authentication/webauthn-as-mfa#webauthn-as-multi-factor-authentication) policy. ## Learn more diff --git a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx index 84fd31b04d..d27abe05c3 100644 --- a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx @@ -12,32 +12,27 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -Universal Components allows you to build a self-service account security UI within your native iOS application. +Auth0 Universal Components allows you to build a self-service account security UI within your native iOS application. This enables your users to manage their own authentication methods, such as MFA factors, passkeys, and recovery codes directly inside your application, without leaving for a web browser or contacting support. ## How it works -Universal Components leverage the [My Account API](/docs/manage-users/my-account-api), which operates using user scoped tokens, to render an authentication-methods management UI inside your application. +Universal Components' `MyAccountAuthMethodsView` component leverages Auth0 My Account API's [authentication methods](/docs/manage-users/my-account-api#manage-authentication-methods) to render an authentication methods management UI inside your application. -When an authenticated user opens their account settings screen, the [Auth0.swift](https://github.com/auth0/Auth0.swift) SDK retrieves an Access Token scoped to the My Account API audience. +When an authenticated user opens their account settings screen, the [Auth0.swift](https://github.com/auth0/Auth0.swift) SDK retrieves an [access token](docs/secure/tokens/access-tokens) scoped to the My Account API audience. -Universal Components use this token to call the API as the logged in user, ensuring each user can only modify their own authentication methods. +Universal Components uses the access token to call the API as the logged in user, ensuring each user can only modify their own authentication methods. -My Account components are used to create **end-user self-service** interfaces. -For **delegated admin** UI where a user manages an Auth0 Organization, read [Build a Delegated Admin Interface](/docs/get-started/universal-components/web/components/build-delegated-admin). - +The `MyAccountAuthMethodsView` universal component is used to create **end-user self-service** interfaces. The end-user can enroll, list, remove every authentication method on the user's account: Email OTP, SMS OTP, TOTP (Authenticator application), Push via Auth0 Guardian, Passkeys, and Recovery Codes. It uses the My Account API [`/me/v1/authentication-methods`](/docs/api/myaccount/authentication-methods/get-authentication-methods) endpoints. -### Available components -Each component leverages the [My Account API](/docs/api/myaccount) and covers one or more authentication methods. +For **delegated admin** interfaces where a user manages an Auth0 Organization, read [Build a Delegated Admin Interface](/docs/get-started/universal-components/web/components/build-delegated-admin). +
-| **Component** | **API endpoint** | -| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------ | -| **Auth Methods Management** — `MyAccountAuthMethodsView`. Enrolls, lists, and removes every authentication method on the user's account: Email OTP, SMS OTP, TOTP (Authenticator application), Push via Auth0 Guardian, Passkeys, and Recovery Codes. | `/me/v1/authentication-methods` | -## Configure My Account API using the Auth0 Dashboard +## Prerequisie -### Enable the My Account API +### Enable Auth0 My Account API 1. Navigate to [Dashboard > Applications > APIs](https://manage.auth0.com/#/apis). 2. Select **Activate My Account API** to enable it for your tenant. @@ -71,6 +66,10 @@ The user's access token only includes permissions they were granted during login ### Configure passkeys (optional) + +[Passkeys](/docs/authenticate/database-connections/passkeys/configure-passkey-policy) require custom domains to be enabled in your tenant. + + You can skip this step if you are not enabling passkey enrollment. 1. Navigate to [Dashboard > Authentication > Database](https://manage.auth0.com/#/connections/database). Open the database connection you want passkeys enabled on. @@ -79,9 +78,7 @@ You can skip this step if you are not enabling passkey enrollment. Auth0 publishes the platform association file (`apple-app-site-association`) on your tenant domain automatically. - -Passkeys require custom domains to be enabled in your tenant. - + ## Configure your application @@ -91,7 +88,7 @@ To install the `Auth0UniversalComponents` universal component use the Swift Pack ### Initialize the SDK -To initialize the SDK call the `Auth0UniversalComponentsSDKInitializer.initialize(...)` once at application start, typically in your application struct's `init`. If your application already uses `Auth0.plist` to configure Auth0.swift, add `ClientId`, `Domain`, and `Audience` keys and call: +To initialize the SDK call the `Auth0UniversalComponentsSDKInitializer.initialize(...)` method once at application start, typically in your application struct's `init`. If your application already uses `Auth0.plist` to configure Auth0.swift, add `ClientId`, `Domain`, and `Audience` keys and call: ```swift App.swift theme={null} import SwiftUI @@ -124,9 +121,11 @@ Or pass the values directly in code: ``` ### Configure the token provider -The `TokenProvider` protocol is how the SDK asks your application for credentials. +The `TokenProvider` protocol is how the SDK request your application for credentials. + Auth0 recommends to use the [`Auth0.swift`](https://github.com/auth0/Auth0.swift) `Auth0.swift's CredentialsManager` utility for production integrations and avoid creating a custom implementation, unless you have storage requirements that `Auth0.swift` SDK does not meet. + If you manage credentials yourself, implement all four methods: @@ -151,7 +150,7 @@ If you manage credentials yourself, implement all four methods: ### Configure passkeys (optional) -To configure [passkeys](/docs/authenticate/database-connections/passkeys) implement a `PasskeysConfiguration` to override default passkey behavior. All fields are optional. +To configure passkeys implement the `PasskeysConfiguration` method to override default passkey behavior. All fields are optional. ```swift theme={null} let passkeys = PasskeysConfiguration( From 24147497593afc4da148c9e5aefcd8f54ebedef4 Mon Sep 17 00:00:00 2001 From: Carlos Date: Fri, 29 May 2026 16:22:06 +0200 Subject: [PATCH 16/50] Update --- .../components/auth-methods-management.mdx | 11 +- .../ios/components/factors/passkeys.mdx | 85 ++++------ .../ios/components/my-account-overview.mdx | 155 ++++++++++-------- .../universal-components/ios/ios-overview.mdx | 4 +- .../universal-components/ios/ios-theming.mdx | 16 +- 5 files changed, 129 insertions(+), 142 deletions(-) diff --git a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx index 303c41d674..292d0cc9b9 100644 --- a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx @@ -12,8 +12,7 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -{/* TODO: Update anchor once DOCS-5840 merges the #manage-authentication-methods section */} -Universal Components for iOS includes the `MyAccountAuthMethodsView` component, a SwiftUI view that handles every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). It uses the My Account API's [authentication methods management](/docs/manage-users/my-account-api#manage-authentication-methods) capabilities to render a complete UI for managing a user's authentication methods. +Universal Components for iOS include the `MyAccountAuthMethodsView` component, a SwiftUI view that handles every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). It uses the My Account API's [authentication methods management](/docs/manage-users/my-account-api#manage-authentication-methods) capabilities to render a complete UI for managing a user's authentication methods. With the `MyAccountAuthMethodsView` component, you do not need to orchestrate navigation, call endpoints, or manage state. @@ -35,7 +34,7 @@ The component handles every authentication method factor configured with the My | [TOTP (Authenticator application)](/docs/secure/multi-factor-authentication/configure-otp) | QR code with manual-entry key → 6-digit OTP verification | Renders the standard `otpauth://` payload. No custom brand logo injection into the QR. | | [Push notifications](/docs/secure/multi-factor-authentication/enable-push-notifications-for-mfa) | QR code for [Auth0 Guardian](/docs/secure/multi-factor-authentication/auth0-guardian) scan → "waiting for approval" state | End users need the public Auth0 Guardian application. Enterprise customers with a branded Guardian SDK build must surface their own install link outside the component. | | [Passkeys](/docs/get-started/universal-components/ios/components/factors/passkeys) | Educational screen → OS biometric prompt → enrolled entry in the list | Requires Apple Associated Domains (`iOS 16.6+`). See the dedicated page for platform setup. | -| [Recovery codes](/docs/secure/multi-factor-authentication/configure-recovery-codes-for-mfa) | Display-once code list with copy action + "I've saved my codes" confirmation | Codes are displayed to the user and never returned to the caller. Copy-to-clipboard uses the platform's standard clipboard API. | +| [Recovery codes](/docs/secure/multi-factor-authentication/configure-recovery-codes-for-mfa) | Display-once code list with a copy action and an "I've saved my codes" confirmation | Codes are displayed to the user and never returned to the caller. The copy-to-clipboard action uses the platform's standard clipboard API. | ## Get started @@ -131,12 +130,12 @@ The SDK also exposes a `Router` helper class for applications that want a type-s ## Localization -Universal Components for iOS do not currently ship localized strings. User-facing copy is presented in English. If localization is a blocker for your integration, submit a feature request in the [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) repository. +Universal Components for iOS do not ship localized strings. User-facing copy is in English. If localization is a blocker for your integration, submit a feature request in the [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) repository. ## Limitations -* **No standalone factor components on iOS**. Every factor renders inside the Auth Methods Management component. There is no public API to enroll, verify, or remove a single factor from a different part of your application. -* **No standalone list/remove components**. The SDK does not ship public components for listing enrolled factors or removing them outside the component. Use the Auth methods component for the full management experience. +* **No standalone factor components on iOS**. Every factor renders inside the Authentication Methods Management component. There is no public API to enroll, verify, or remove a single factor from a different part of your application. +* **No standalone list/remove components**. The SDK does not ship public components for listing enrolled factors or removing them outside the component. Use the Authentication Methods Management component for the full management experience. * **Post-login passkey prompts are not supported**. Prompting a user to save a passkey immediately after sign-in (separate from the settings screen) is not covered by this SDK today. You can track [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) for updates. ## Learn more diff --git a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx index 6cdcafbeb8..5f2e139dd8 100644 --- a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx @@ -1,6 +1,6 @@ --- title: Passkeys on iOS -description: SDK-specific behavior, application side entitlements, and customization for the Passkey factor rendered inside the Auth Methods Management component on iOS. +description: SDK-specific behavior, application-side entitlements, and customization for the passkey factor rendered inside the Authentication Methods Management component on iOS. sidebarTitle: Passkeys --- @@ -12,11 +12,11 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -Universal Components for iOS's [`MyAccountAuthMethodsView`](/docs/get-started/universal-components/ios/components/auth-methods-management) component renders the Auth0 [Passkey](/docs/authenticate/database-connections/passkeys) enrollment flow. +The [`MyAccountAuthMethodsView`](/docs/get-started/universal-components/ios/components/auth-methods-management) component in Universal Components for iOS renders the Auth0 [passkey](/docs/authenticate/database-connections/passkeys) enrollment flow. -The passkey enrollent flow renders an educational screen, a WebAuthn registration handshake with the platform authenticator, and the enrolled-factor entry in the authenticator list. +The passkey enrollment flow renders an educational screen, a WebAuthn registration handshake with the platform authenticator, and the enrolled-factor entry in the authenticator list. -Unlike other factors, passkeys requires application side platform entitlements that the Universal Components for iOS SDK can not configure. +Unlike other factors, passkeys require application-side platform entitlements that the Universal Components for iOS SDK cannot configure. ## Prerequisites @@ -24,38 +24,34 @@ Unlike other factors, passkeys requires application side platform entitlements t To enable platform entitlements and specific Universal Components for iOS SDK configuration for passkeys support: -* **Enable passkeys on your Auth0 database connection**. To learn more, read [Passkeys](/docs/authenticate/database-connections/passkeys) to enable it in your Auth0 tenant. +* **Enable passkeys on your Auth0 database connection**. To learn how to enable passkeys in your Auth0 tenant, read [Passkeys](/docs/authenticate/database-connections/passkeys). -* **Install and configure the Universal Component for iOS**. To install, configure your Auth0 tenant, and initialize the SDK, read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview). -Configure the optional [`PasskeysConfiguration`](/docs/get-started/universal-components/ios/components/my-account-overview#configure-passkeys-optional-2) component, if your integration needs a specific connection or linked identity. +* **Install and configure Universal Components for iOS**. To install Universal Components, configure your Auth0 tenant, and initialize the SDK, read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview). If your integration needs a specific connection or linked identity, configure the optional [`PasskeysConfiguration`](/docs/get-started/universal-components/ios/components/my-account-overview#configure-passkeys-in-the-sdk-optional). -* **Confirm OS version**. Universal Components for iOS hides the passkey option on devices running **iOS < 16.6**, **macOS < 13.5**, or **visionOS < 1.0**. +* **Confirm OS version**. Universal Components for iOS hide the passkey option on devices running **iOS < 16.6**, **macOS < 13.5**, or **visionOS < 1.0**. ## Platform setup -Passkeys binds credentials to your Auth0 tenant [custom domain](/docs/customize/custom-domains), to add your Apple associated domains: +Passkeys bind credentials to your Auth0 tenant's [custom domain](/docs/customize/custom-domains). To add your Apple associated domains: -**Add the associated domains entitlement** +### Add the associated domains entitlement - In **Xcode**, open your target's **Signing & Capabilities** and add **Associated Domains**. Add the entry: +In **Xcode**, open your target's **Signing & Capabilities** and add **Associated Domains**. Add the entry: - ```text - webcredentials:YOUR_AUTH0_DOMAIN - ``` +```text wrap lines +webcredentials:YOUR_AUTH0_DOMAIN +``` - For example: `webcredentials:YOUR-TENANT.auth0.com`. +For example: `webcredentials:YOUR_TENANT.auth0.com`. -**Register your application bundle ID in the Auth0 Dashboard** +### Register your application bundle ID in the Auth0 Dashboard - A. Navigate to **Auth0 Dashboard → Authentication → Database** - - B. Select the **Database Connections** - - C. Select the **Passkey settings** tab - - D. Add your application bundle ID in the **Allowed iOS Applications** +1. Navigate to **Auth0 Dashboard > Authentication > Database**. +2. Select the **Database Connections**. +3. Select the **Passkey settings** view. +4. Add your application bundle ID in the **Allowed iOS Applications**. - Auth0 publishes the `apple-app-site-association` file at `/.well-known/apple-app-site-association` on your domain automatically and includes every registered bundle ID. +Auth0 publishes the `apple-app-site-association` file at `/.well-known/apple-app-site-association` on your domain automatically and includes every registered bundle ID. Apple's [supporting associated domains](https://developer.apple.com/documentation/xcode/supporting-associated-domains) guide is the authoritative reference for entitlements and the Apple App Site Association (AASA) file. Validate your AASA file with the [AASA Validator](https://app-site-association.cdn-apple.com/) before testing on-device. @@ -66,44 +62,23 @@ Apple's [supporting associated domains](https://developer.apple.com/documentatio The passkey educational and status screens inherit the component's active theme. The biometric prompt itself is rendered by the OS and cannot be themed. - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TokenEffect on Passkey screens
`background.accent`Accent color for the passkey educational illustration
`background.primary`Add Passkey button background
`text.onPrimary`Add Passkey button label
`text.bold`Headline and explainer copy
`radius.button`Button corner radius
+| **Token** | **Effect on passkey screens** | +|-----------|-------------------------------| +| `background.accent` | Accent color for the passkey educational illustration | +| `background.primary` | **Add Passkey** button background | +| `text.onPrimary` | **Add Passkey** button label | +| `text.bold` | Headline and explainer copy | +| `radius.button` | Button corner radius | To learn more about the full token catalog, read [Customize Style and Themes](/docs/get-started/universal-components/ios/ios-theming). -### SDK Limitations +### SDK limitations -* **Passkeys can only be enrolled from inside the Auth Methods Management component**. There is no public SwiftUI API to trigger a standalone passkey enrollment from elsewhere in your application. Post-login "save a passkey" upsell prompts are not supported today. You can track [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) for updates. +* **Passkeys can only be enrolled from inside the Authentication Methods Management component**. There is no public SwiftUI API to trigger a standalone passkey enrollment from elsewhere in your application. Post-login "save a passkey" upsell prompts are not supported. You can track [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) for updates. * **Removing a passkey in the component does not purge the OS credential store**. The enrolled passkey detaches from the Auth0 account, but the private credential remains in iCloud Keychain until the user removes it from the OS-level credential manager. -* **Attestation conveyance is not surfaced**. The SDK does not allow to select the attestation policy (`none` / `indirect` / `direct`) or enumerate authenticator transports. It uses the Auth0 tenant's configured [WebAuthn](/docs/secure/multi-factor-authentication/webauthn-as-mfa#webauthn-as-multi-factor-authentication) policy. +* **Attestation conveyance is not surfaced**. The SDK does not let you select the attestation policy (`none` / `indirect` / `direct`) or enumerate authenticator transports. It uses the Auth0 tenant's configured [WebAuthn](/docs/secure/multi-factor-authentication/webauthn-as-mfa#webauthn-as-multi-factor-authentication) policy. ## Learn more diff --git a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx index d27abe05c3..decd5595a1 100644 --- a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx @@ -12,25 +12,25 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -Auth0 Universal Components allows you to build a self-service account security UI within your native iOS application. -This enables your users to manage their own authentication methods, such as MFA factors, passkeys, and recovery codes directly inside your application, without leaving for a web browser or contacting support. +Auth0 Universal Components allow you to build a self-service account security UI within your native iOS application. Universal Components let users manage their own authentication methods — such as multi-factor authentication (MFA) factors, passkeys, and recovery codes — directly inside your application, without leaving for a web browser or contacting support. ## How it works -Universal Components' `MyAccountAuthMethodsView` component leverages Auth0 My Account API's [authentication methods](/docs/manage-users/my-account-api#manage-authentication-methods) to render an authentication methods management UI inside your application. -When an authenticated user opens their account settings screen, the [Auth0.swift](https://github.com/auth0/Auth0.swift) SDK retrieves an [access token](docs/secure/tokens/access-tokens) scoped to the My Account API audience. +The `MyAccountAuthMethodsView` component in Universal Components uses the Auth0 My Account API's [authentication methods](/docs/manage-users/my-account-api#manage-authentication-methods) to render an authentication methods management UI inside your application. -Universal Components uses the access token to call the API as the logged in user, ensuring each user can only modify their own authentication methods. +When an authenticated user opens their account settings screen, the [Auth0.swift](https://github.com/auth0/Auth0.swift) SDK retrieves an [access token](/docs/secure/tokens/access-tokens) scoped to the My Account API audience. + +Universal Components use the access token to call the API as the logged-in user, so each user can only modify their own authentication methods. -The `MyAccountAuthMethodsView` universal component is used to create **end-user self-service** interfaces. The end-user can enroll, list, remove every authentication method on the user's account: Email OTP, SMS OTP, TOTP (Authenticator application), Push via Auth0 Guardian, Passkeys, and Recovery Codes. It uses the My Account API [`/me/v1/authentication-methods`](/docs/api/myaccount/authentication-methods/get-authentication-methods) endpoints. +The `MyAccountAuthMethodsView` universal component creates **end-user self-service** interfaces. End users can enroll, list, and remove every authentication method on their account: email OTP, SMS OTP, TOTP (authenticator application), push via Auth0 Guardian, passkeys, and recovery codes. It uses the My Account API [`/me/v1/authentication-methods`](/docs/api/myaccount/authentication-methods/get-authentication-methods) endpoints. For **delegated admin** interfaces where a user manages an Auth0 Organization, read [Build a Delegated Admin Interface](/docs/get-started/universal-components/web/components/build-delegated-admin). -## Prerequisie +## Prerequisites ### Enable Auth0 My Account API @@ -49,7 +49,7 @@ For **delegated admin** interfaces where a user manages an Auth0 Organization, r ### Configure scopes -Request the scopes your application needs from the My Account API when obtaining the user's access token. +When you request the user's access token, request the scopes your application needs from the My Account API. ``` @@ -64,10 +64,13 @@ Request the scopes your application needs from the My Account API when obtaining The user's access token only includes permissions they were granted during login. Request all four scopes if you want users to enroll, review, and remove authentication methods.
-### Configure passkeys (optional) +### Configure passkeys in your tenant (optional) [Passkeys](/docs/authenticate/database-connections/passkeys/configure-passkey-policy) require custom domains to be enabled in your tenant. + +Passkeys require **iOS 16.6+**, macOS **13.5+**, or visionOS **1.0+**. + You can skip this step if you are not enabling passkey enrollment. @@ -84,96 +87,106 @@ Auth0 publishes the platform association file (`apple-app-site-association`) on ### Install the SDK -To install the `Auth0UniversalComponents` universal component use the Swift Package Manager or Carthage. For installation details and requirements, read [Auth0 Universal Components for iOS](/docs/get-started/universal-components/ios/ios-overview). +To install the `Auth0UniversalComponents` universal component, use the Swift Package Manager or Carthage. For installation details and requirements, read [Auth0 Universal Components for iOS](/docs/get-started/universal-components/ios/ios-overview). ### Initialize the SDK -To initialize the SDK call the `Auth0UniversalComponentsSDKInitializer.initialize(...)` method once at application start, typically in your application struct's `init`. If your application already uses `Auth0.plist` to configure Auth0.swift, add `ClientId`, `Domain`, and `Audience` keys and call: +To initialize the SDK, call the `Auth0UniversalComponentsSDKInitializer.initialize(...)` method once at application start, typically in your application struct's `init`. If your application already uses `Auth0.plist` to configure Auth0.swift, add `ClientId`, `Domain`, and `Audience` keys and call: - ```swift App.swift theme={null} - import SwiftUI - import Auth0 - import Auth0UniversalComponents +```swift App.swift wrap lines +import SwiftUI +import Auth0 +import Auth0UniversalComponents - @main - struct MyApp: App { - init() { - Auth0UniversalComponentsSDKInitializer.initialize( - tokenProvider: CredentialsManager(authentication: Auth0.authentication()) - ) - } +@main +struct MyApp: App { + init() { + Auth0UniversalComponentsSDKInitializer.initialize( + tokenProvider: CredentialsManager(authentication: Auth0.authentication()) + ) + } - var body: some Scene { - WindowGroup { ContentView() } - } + var body: some Scene { + WindowGroup { ContentView() } } - ``` +} +``` Or pass the values directly in code: - ```swift App.swift theme={null} - Auth0UniversalComponentsSDKInitializer.initialize( - domain: "YOUR_AUTH0_DOMAIN", - clientId: "YOUR_CLIENT_ID", - audience: "https://YOUR_AUTH0_DOMAIN/me/", - tokenProvider: CredentialsManager(authentication: Auth0.authentication()) - ) - ``` +```swift App.swift wrap lines +Auth0UniversalComponentsSDKInitializer.initialize( + domain: "YOUR_AUTH0_DOMAIN", + clientId: "YOUR_CLIENT_ID", + audience: "https://YOUR_AUTH0_DOMAIN/me/", + tokenProvider: CredentialsManager(authentication: Auth0.authentication()) +) +``` + ### Configure the token provider -The `TokenProvider` protocol is how the SDK request your application for credentials. +The `TokenProvider` protocol is the interface the SDK uses to request credentials from your application. -Auth0 recommends to use the [`Auth0.swift`](https://github.com/auth0/Auth0.swift) `Auth0.swift's CredentialsManager` utility for production integrations and avoid creating a custom implementation, unless you have storage requirements that `Auth0.swift` SDK does not meet. +Auth0 recommends using the [`Auth0.swift`](https://github.com/auth0/Auth0.swift) `CredentialsManager` for production integrations. Implement a custom `TokenProvider` only if the `Auth0.swift` SDK does not meet your storage requirements. If you manage credentials yourself, implement all four methods: - ```swift theme={null} - struct AppTokenProvider: TokenProvider { - func fetchCredentials() async throws -> Credentials { - // Return the user's login credentials. - } - func storeCredentials(credentials: Credentials) { - // Persist new or refreshed credentials. - } - func store(apiCredentials: APICredentials, for audience: String) { - // Persist My Account API credentials keyed by audience. - } - func fetchAPICredentials(audience: String, scope: String) async throws -> APICredentials { - // Return cached My Account API credentials, refreshing if expired. - } - } - ``` +```swift wrap lines +struct AppTokenProvider: TokenProvider { + func fetchCredentials() async throws -> Credentials { + // Return the user's login credentials. + } + func storeCredentials(credentials: Credentials) { + // Persist new or refreshed credentials. + } + func store(apiCredentials: APICredentials, for audience: String) { + // Persist My Account API credentials keyed by audience. + } + func fetchAPICredentials(audience: String, scope: String) async throws -> APICredentials { + // Return cached My Account API credentials, refreshing if expired. + } +} +``` -### Configure passkeys (optional) +### Configure passkeys in the SDK (optional) -To configure passkeys implement the `PasskeysConfiguration` method to override default passkey behavior. All fields are optional. +To configure passkeys, implement the `PasskeysConfiguration` initializer to override default passkey behavior. All fields are optional. - ```swift theme={null} - let passkeys = PasskeysConfiguration( - userIdentityId: "auth0|abc123", - connection: "Username-Password-Authentication" - ) +```swift wrap lines +let passkeys = PasskeysConfiguration( + userIdentityId: "auth0|abc123", + connection: "Username-Password-Authentication" +) - Auth0UniversalComponentsSDKInitializer.initialize( - passkeyConfiguration: passkeys, - tokenProvider: credentialsManager - ) - ``` +Auth0UniversalComponentsSDKInitializer.initialize( + passkeyConfiguration: passkeys, + tokenProvider: credentialsManager +) +``` -Add the Associated Domains entitlement to your Xcode target so the platform authenticator will issue credentials for your Auth0 tenant: +Add the Associated Domains entitlement to your Xcode target so the platform authenticator can issue credentials for your Auth0 tenant: -``` - webcredentials:YOUR_AUTH0_DOMAIN +```text wrap lines +webcredentials:YOUR_AUTH0_DOMAIN ``` - -Passkeys require iOS 16.6+, macOS 13.5+, or visionOS 1.0+. - - Users must be authenticated before you render any component. Once the SDK is initialized and your `TokenProvider` is wired up, drop the [Auth Methods Management](/docs/get-started/universal-components/ios/components/auth-methods-management) component into your settings screen to give users full MFA, passkey, and recovery-code self-service. + Users must be authenticated before you render any component. After the SDK is initialized and your `TokenProvider` is wired up, drop the [Auth Methods Management](/docs/get-started/universal-components/ios/components/auth-methods-management) component into your settings screen to give users full MFA, passkey, and recovery-code self-service. + +## Learn more + + + + Component reference, supported factors, and embedded-navigation examples. + + + + Override colors, typography, spacing, radius, and size tokens using the Auth0 design-token system. + + diff --git a/main/docs/get-started/universal-components/ios/ios-overview.mdx b/main/docs/get-started/universal-components/ios/ios-overview.mdx index 7daea453b4..39537fd995 100644 --- a/main/docs/get-started/universal-components/ios/ios-overview.mdx +++ b/main/docs/get-started/universal-components/ios/ios-overview.mdx @@ -1,5 +1,5 @@ --- -title: Universal Components for iOS applications +title: Universal Components for iOS Applications description: Learn how to install and configure Auth0 Universal Components for iOS applications. sidebarTitle: Install and Configure Universal Components --- @@ -25,7 +25,7 @@ To use Universal Components for iOS, you need: * Programming language: `Swift 5+` (6 preferred), `Xcode 16+` -Auth0 [Passkeys](/docs/authenticate/database-connections/passkeys) support requires operating systems: **iOS 16.6+, macOS 13.5+,** or **visionOS 1.0+**. +Auth0 [passkey](/docs/authenticate/database-connections/passkeys) support requires **iOS 16.6+**, **macOS 13.5+**, or **visionOS 1.0+**. ## Install the SDK diff --git a/main/docs/get-started/universal-components/ios/ios-theming.mdx b/main/docs/get-started/universal-components/ios/ios-theming.mdx index 3aa6ed59c2..e1475bfe55 100644 --- a/main/docs/get-started/universal-components/ios/ios-theming.mdx +++ b/main/docs/get-started/universal-components/ios/ios-theming.mdx @@ -12,7 +12,7 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -Auth0 [Universal Components for iOS](https://github.com/auth0/ui-components-ios) use a design token model. Every visual property, such as, colors, typography, spacing, corner radii, and component sizes are expressed as a token that you can override without rewriting layouts. +Auth0 [Universal Components for iOS](https://github.com/auth0/ui-components-ios) use a design token model. Visual properties such as colors, typography, spacing, corner radii, and component sizes are each expressed as a token that you can override without changes to your layouts. The default theme renders the standard Auth0 style without any configuration. You can provide your own theme to match your brand. @@ -136,7 +136,7 @@ Colors are split across three focused protocols: `Auth0BackgroundColorTokens`, ` All color assets are adaptive. The asset catalog handles light and dark mode automatically. -#### Background primary +**Background primary** | **Token** | **Usage** | |-----------|-----------| @@ -145,7 +145,7 @@ All color assets are adaptive. The asset catalog handles light and dark mode aut | `background.inverse` | Contrast-flipped background | | `background.accent` | Branded or featured UI highlight | -#### Background layers +**Background layers** | **Token** | **Usage** | |-----------|-----------| @@ -153,7 +153,7 @@ All color assets are adaptive. The asset catalog handles light and dark mode aut | `background.layerMedium` | Cards and raised containers | | `background.layerBase` | Main app background | -#### Background feedback +**Background feedback** | **Token** | **Usage** | |-----------|-----------| @@ -162,7 +162,7 @@ All color assets are adaptive. The asset catalog handles light and dark mode aut | `background.success` | Success state container | | `background.successSubtle` | Subtle success banner | -#### Text content +**Text content** | **Token** | **Usage** | |-----------|-----------| @@ -170,7 +170,7 @@ All color assets are adaptive. The asset catalog handles light and dark mode aut | `text.regular` | Secondary copy, descriptions, captions | | `text.disabled` | Disabled and placeholder text | -#### Text on color surfaces +**Text on color surfaces** | **Token** | **Usage** | |-----------|-----------| @@ -178,7 +178,7 @@ All color assets are adaptive. The asset catalog handles light and dark mode aut | `text.onSuccess` | Text and icons on `background.success` | | `text.onError` | Text and icons on `background.error`, validation messages | -#### Border +**Border** | **Token** | **Usage** | |-----------|-----------| @@ -214,7 +214,7 @@ If typeface `Inter` is not bundled in the host application, SwiftUI uses the `SF -Spacing defaults to a `4 pt` grid. Use the token name in design hand offs to customize spacing, not the raw pixel value. +Spacing defaults to a `4 pt` grid. Use the token name in design handoffs to customize spacing, not the raw pixel value. | **Token** | **Default** | **Description** | |-----------|------------|-----------------| From 0cac5ed756cfa849eb29afe9fb99f695cf716b57 Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 2 Jun 2026 01:02:42 +0200 Subject: [PATCH 17/50] Update --- .../components/auth-methods-management.mdx | 130 +++++++------ .../ios/components/factors/passkeys.mdx | 52 +++-- .../ios/components/my-account-overview.mdx | 178 ++++++++---------- .../universal-components/ios/ios-overview.mdx | 40 ++-- .../universal-components/ios/ios-theming.mdx | 166 ++++++++-------- 5 files changed, 269 insertions(+), 297 deletions(-) diff --git a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx index 292d0cc9b9..bee3c92b55 100644 --- a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx @@ -1,7 +1,7 @@ --- title: Auth Methods Management on iOS description: Render a full-screen UI that lets users enroll, review, and remove MFA factors, passkeys, and recovery codes using the Auth0 My Account API on iOS. -sidebarTitle: Auth Methods Management +sidebarTitle: MyAccountAuthMethodsView component --- import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" @@ -12,20 +12,24 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -Universal Components for iOS include the `MyAccountAuthMethodsView` component, a SwiftUI view that handles every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). It uses the My Account API's [authentication methods management](/docs/manage-users/my-account-api#manage-authentication-methods) capabilities to render a complete UI for managing a user's authentication methods. +The Universal Components for iOS SDK include the `MyAccountAuthMethodsView` component, a SwiftUI view that handles every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). -With the `MyAccountAuthMethodsView` component, you do not need to orchestrate navigation, call endpoints, or manage state. + +It uses the My Account API's [authentication methods management](/docs/manage-users/my-account-api#manage-authentication-methods) capabilities to render a complete UI for managing a user's authentication methods. + + +Using the `MyAccountAuthMethodsView` component, you do not need to orchestrate navigation, call endpoints, or manage state. ## Setup requirements -Before rendering the `MyAccountAuthMethodsView` component, follow [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK with a token provider. -The component reads its configuration, token provider, and passkey settings from the initialized SDK. +* Before rendering the `MyAccountAuthMethodsView` component, follow [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK with a token provider. +* The `MyAccountAuthMethodsView` component reads its configuration, token provider, and passkey settings from the initialized SDK. ## Supported factors -The component handles every authentication method factor configured with the My Account API. Each factor's screens inherit the component's active theme. To learn more, read [Customize Style and Themes](/docs/get-started/universal-components/ios/ios-theming). +The component handles every authentication method factor configured with the My Account API. Each factor's screen inherits the component's active theme. To learn more, read [Customize Style and Themes](/docs/get-started/universal-components/ios/ios-theming). | **Factor** | **What the component renders** | **SDK notes** | |-----------|-------------------------------|--------------| @@ -38,31 +42,33 @@ The component handles every authentication method factor configured with the My ## Get started -Add the `MyAccountAuthMethodsView()` component anywhere in your SwiftUI hierarchy, typically behind a settings navigation link. - -```swift SettingsView.swift wrap lines -import SwiftUI -import Auth0UniversalComponents - -struct SettingsView: View { - var body: some View { - NavigationStack { - List { - NavigationLink(destination: MyAccountAuthMethodsView()) { - Label("Authentication Methods", systemImage: "lock.shield") +Add the `MyAccountAuthMethodsView` component anywhere in your SwiftUI hierarchy, typically behind a settings navigation link. + + ```swift SettingsView.swift wrap lines + import SwiftUI + import Auth0UniversalComponents + + struct SettingsView: View { + var body: some View { + NavigationStack { + List { + NavigationLink(destination: MyAccountAuthMethodsView()) { + Label("Authentication Methods", systemImage: "lock.shield") + } + } + .navigationTitle("Account Settings") } } - .navigationTitle("Account Settings") } - } -} -``` + ``` -The view takes no initializer parameters. Customize behavior through SwiftUI view modifiers and environment values. +The Swift view takes no initializer parameters. To customize behavior use SwiftUI view modifiers and environment values. ## Parameters -| **Modifier / environment** | **Type** | **Purpose** | +The `MyAccountAuthMethodsView` component accepts the following modifier and environment values: + +| **Modifier / environment values** | **Type** | **Purpose** | |---------------------------|----------|-------------| | `.auth0Theme(_:)` | `Auth0Theme` | Override design tokens—colors, typography, spacing, radius, sizes. To learn more, read [Customize Style and Themes](/docs/get-started/universal-components/ios/ios-theming). | | `.embeddedInNavigationStack()` | — | Mark the view as embedded in a host `NavigationStack` so the SDK pushes onto your stack instead of creating its own. | @@ -70,19 +76,21 @@ The view takes no initializer parameters. Customize behavior through SwiftUI vie ## Customization -Theming is applied to the component as a whole; individual factor screens inherit the active theme. Use a custom `Auth0Theme` to override design tokens across every screen the component renders: +Theming is applied to the component as a whole; individual factor screens inherit the active theme. -```swift wrap lines -MyAccountAuthMethodsView() - .auth0Theme( - Auth0Theme( - colors: DefaultAuth0ColorTokens( - background: DefaultAuth0BackgroundColorTokens(primary: Color("BrandBlue")), - text: DefaultAuth0TextColorTokens(onPrimary: .white) +Use a custom `Auth0Theme` modifier to override design tokens across every screen the component renders: + + ```swift wrap lines + MyAccountAuthMethodsView() + .auth0Theme( + Auth0Theme( + colors: DefaultAuth0ColorTokens( + background: DefaultAuth0BackgroundColorTokens(primary: Color("BrandBlue")), + text: DefaultAuth0TextColorTokens(onPrimary: .white) + ) + ) ) - ) - ) -``` + ``` To learn more about the full token catalog and dark-mode patterns, read [Customize Style and Themes](/docs/get-started/universal-components/ios/ios-theming). @@ -94,43 +102,47 @@ By default, the `MyAccountAuthMethodsView` component manages its own `Navigation If your application already owns a navigation stack, nesting a second stack breaks back-button behavior and swipe-to-go-back gestures. Embed the `MyAccountAuthMethodsView` component into your stack instead. -```swift wrap lines -import SwiftUI -import Auth0UniversalComponents - -struct AccountScreen: View { - @State private var path = NavigationPath() - - var body: some View { - NavigationStack(path: $path) { - List { - NavigationLink("Authentication methods", value: "auth-methods") - } - .navigationDestination(for: String.self) { value in - if value == "auth-methods" { - MyAccountAuthMethodsView() - .embeddedInNavigationStack() + ```swift wrap lines + import SwiftUI + import Auth0UniversalComponents + + struct AccountScreen: View { + @State private var path = NavigationPath() + + var body: some View { + NavigationStack(path: $path) { + List { + NavigationLink("Authentication methods", value: "auth-methods") + } + .navigationDestination(for: String.self) { value in + if value == "auth-methods" { + MyAccountAuthMethodsView() + .embeddedInNavigationStack() + } + } } + .environment(\.hostNavigationPath, $path) } } - .environment(\.hostNavigationPath, $path) - } -} -``` + ``` There are two requirements when using embedded mode: -* Apply `.embeddedInNavigationStack()` to `MyAccountAuthMethodsView` so it skips creating an inner stack. +* Add the `.embeddedInNavigationStack()` modifier to `MyAccountAuthMethodsView` component to skips creating an inner stack. -* Add `\.hostNavigationPath` on the outer `NavigationStack` so the SDK knows which path binding to push onto. +* Add the `\.hostNavigationPath` mofidier to the outer `NavigationStack` so the SDK knows which path binding to push onto. -The SDK also exposes a `Router` helper class for applications that want a type-safe navigation controller for their own routes. It is not required to drive the SDK's internal navigation. Only use it if you want to apply the same pattern to your application's screens. +The SDK also exposes a `Router` helper class for applications that want a type-safe navigation controller for their own routes. + +It is not required to drive the SDK's internal navigation. Only use it if you want to apply the same pattern to your application's screens. ## Localization -Universal Components for iOS do not ship localized strings. User-facing copy is in English. If localization is a blocker for your integration, submit a feature request in the [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) repository. +Universal Components for iOS do not ship localized strings. User-facing copy is in English. + +If localization is a blocker for your integration, submit a feature request in the [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) repository. ## Limitations diff --git a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx index 5f2e139dd8..85558fc96e 100644 --- a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx @@ -1,5 +1,5 @@ --- -title: Passkeys on iOS +title: Passkeys on Universal Component for iOS description: SDK-specific behavior, application-side entitlements, and customization for the passkey factor rendered inside the Authentication Methods Management component on iOS. sidebarTitle: Passkeys --- @@ -12,55 +12,47 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -The [`MyAccountAuthMethodsView`](/docs/get-started/universal-components/ios/components/auth-methods-management) component in Universal Components for iOS renders the Auth0 [passkey](/docs/authenticate/database-connections/passkeys) enrollment flow. +The [`MyAccountAuthMethodsView`](/docs/get-started/universal-components/ios/components/auth-methods-management) component can render the Auth0 [passkey](/docs/authenticate/database-connections/passkeys) enrollment flow. The passkey enrollment flow renders an educational screen, a WebAuthn registration handshake with the platform authenticator, and the enrolled-factor entry in the authenticator list. -Unlike other factors, passkeys require application-side platform entitlements that the Universal Components for iOS SDK cannot configure. +Unlike other factors, Auth0 [Passkeys](/docs/authenticate/database-connections/passkeys) require application-side platform entitlements that the Universal Components for iOS SDK cannot configure. ## Prerequisites -To enable platform entitlements and specific Universal Components for iOS SDK configuration for passkeys support: +To enable platform entitlements for Universal Component for iOS SDK passkeys support: -* **Enable passkeys on your Auth0 database connection**. To learn how to enable passkeys in your Auth0 tenant, read [Passkeys](/docs/authenticate/database-connections/passkeys). +* **Enable passkeys on your Auth0 database connection**. To learn how to enable passkeys in your Auth0 tenant, read [Passkeys](/docs/authenticate/database-connections/passkeys/configure-passkey-policy). -* **Install and configure Universal Components for iOS**. To install Universal Components, configure your Auth0 tenant, and initialize the SDK, read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview). If your integration needs a specific connection or linked identity, configure the optional [`PasskeysConfiguration`](/docs/get-started/universal-components/ios/components/my-account-overview#configure-passkeys-in-the-sdk-optional). +* **Install and configure Universal Components for iOS**. To install Universal Components, configure your Auth0 tenant, and initialize the SDK, read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview). -* **Confirm OS version**. Universal Components for iOS hide the passkey option on devices running **iOS < 16.6**, **macOS < 13.5**, or **visionOS < 1.0**. +* **Confirm OS version**. Passkeys is supported on devices running **iOS 16.6+**, macOS **13.5+**, or visionOS **1.0+**. -## Platform setup - -Passkeys bind credentials to your Auth0 tenant's [custom domain](/docs/customize/custom-domains). To add your Apple associated domains: - -### Add the associated domains entitlement - -In **Xcode**, open your target's **Signing & Capabilities** and add **Associated Domains**. Add the entry: +* **Register your Apple Bundle identifier in your native application** To learn more, read [Enable Universal Links Support in Apple Xcode](/docs/get-started/applications/enable-universal-links-support-in-apple-xcode#obtain-apple-team-id-and-bundle-identifier). -```text wrap lines -webcredentials:YOUR_AUTH0_DOMAIN -``` - -For example: `webcredentials:YOUR_TENANT.auth0.com`. +## Platform setup -### Register your application bundle ID in the Auth0 Dashboard +### Add the associated domain in Xcode -1. Navigate to **Auth0 Dashboard > Authentication > Database**. -2. Select the **Database Connections**. -3. Select the **Passkey settings** view. -4. Add your application bundle ID in the **Allowed iOS Applications**. +Passkeys bind credentials to your Auth0 tenant's [custom domain](/docs/customize/custom-domains), add your custom domain to your application: -Auth0 publishes the `apple-app-site-association` file at `/.well-known/apple-app-site-association` on your domain automatically and includes every registered bundle ID. +* Open [**Xcode**](https://developer.apple.com/documentation/xcode) +* Select your target's **Signing & Capabilities** +* Add a **Capability** and select **Associated Domains** + Enter your Auth0 custom domain: - -Apple's [supporting associated domains](https://developer.apple.com/documentation/xcode/supporting-associated-domains) guide is the authoritative reference for entitlements and the Apple App Site Association (AASA) file. Validate your AASA file with the [AASA Validator](https://app-site-association.cdn-apple.com/) before testing on-device. - + ```text wrap lines + webcredentials:YOUR_AUTH0_DOMAIN + ``` ## Customization -The passkey educational and status screens inherit the component's active theme. The biometric prompt itself is rendered by the OS and cannot be themed. +The passkey educational and status screens inherit the `MyAccountAuthMethodsView` component active theme. + +The biometric prompt itself is rendered by the OS and cannot be themed. | **Token** | **Effect on passkey screens** | |-----------|-------------------------------| @@ -74,7 +66,7 @@ To learn more about the full token catalog, read [Customize Style and Themes](/d ### SDK limitations -* **Passkeys can only be enrolled from inside the Authentication Methods Management component**. There is no public SwiftUI API to trigger a standalone passkey enrollment from elsewhere in your application. Post-login "save a passkey" upsell prompts are not supported. You can track [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) for updates. +* **Passkeys can only be enrolled from inside the `MyAccountAuthMethodsView` component**. There is no public SwiftUI API to trigger a standalone passkey enrollment from elsewhere in your application. Post-login "save a passkey" upsell prompts are not supported. You can track [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) for updates. * **Removing a passkey in the component does not purge the OS credential store**. The enrolled passkey detaches from the Auth0 account, but the private credential remains in iCloud Keychain until the user removes it from the OS-level credential manager. diff --git a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx index decd5595a1..edb777a4ca 100644 --- a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx @@ -12,21 +12,22 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -Auth0 Universal Components allow you to build a self-service account security UI within your native iOS application. Universal Components let users manage their own authentication methods — such as multi-factor authentication (MFA) factors, passkeys, and recovery codes — directly inside your application, without leaving for a web browser or contacting support. +Auth0 Universal Components for iOS allow you to build a self-service account security UI within your [native iOS application](https://auth0.com/docs/get-started/auth0-overview/create-applications#create-application-in-auth0). + +Using the Universal component `MyAccountAuthMethodsView` you can let users manage their own authentication methods. such as, multi-factor authentication (MFA) factors, passkeys, and recovery codes directly inside your application, without leaving for a web browser or contacting support. ## How it works -The `MyAccountAuthMethodsView` component in Universal Components uses the Auth0 My Account API's [authentication methods](/docs/manage-users/my-account-api#manage-authentication-methods) to render an authentication methods management UI inside your application. +The `MyAccountAuthMethodsView` component uses Auth0 My Account API's [authentication methods](/docs/manage-users/my-account-api#manage-authentication-methods) to render an authentication methods management UI inside your application. When an authenticated user opens their account settings screen, the [Auth0.swift](https://github.com/auth0/Auth0.swift) SDK retrieves an [access token](/docs/secure/tokens/access-tokens) scoped to the My Account API audience. -Universal Components use the access token to call the API as the logged-in user, so each user can only modify their own authentication methods. +`MyAccountAuthMethodsView` uses the access token to call the My Account API [`/me/v1/authentication-methods`](/docs/api/myaccount/authentication-methods/get-authentication-methods) endpoints as the logged-in user, so each user can only modify their own authentication methods. -The `MyAccountAuthMethodsView` universal component creates **end-user self-service** interfaces. End users can enroll, list, and remove every authentication method on their account: email OTP, SMS OTP, TOTP (authenticator application), push via Auth0 Guardian, passkeys, and recovery codes. It uses the My Account API [`/me/v1/authentication-methods`](/docs/api/myaccount/authentication-methods/get-authentication-methods) endpoints. - +* The `MyAccountAuthMethodsView` component creates **end-user self-service** interfaces. End users can enroll, list, and remove every authentication method on their account: email OTP, SMS OTP, TOTP (authenticator application), push via Auth0 Guardian, passkeys, and recovery codes. -For **delegated admin** interfaces where a user manages an Auth0 Organization, read [Build a Delegated Admin Interface](/docs/get-started/universal-components/web/components/build-delegated-admin). +* For **delegated admin** interfaces where a user manages an Auth0 Organization, read [Build a Delegated Admin Interface](/docs/get-started/universal-components/web/components/build-delegated-admin). @@ -37,93 +38,84 @@ For **delegated admin** interfaces where a user manages an Auth0 Organization, r 1. Navigate to [Dashboard > Applications > APIs](https://manage.auth0.com/#/apis). 2. Select **Activate My Account API** to enable it for your tenant. -### Create an application and configure My Account API scopes +### Create an Auth0 application and configure My Account API permissions 1. Navigate to [Dashboard > Applications](https://manage.auth0.com/#/applications). 2. Select **Create Application**. 3. Select **Native**. -4. In the **Settings** tab, add the callback URL in the **Allowed Callback URLs**: `https://YOUR_AUTH0_DOMAIN://YOUR_BUNDLE_ID/ios/YOUR_BUNDLE_ID/callback`. +4. Select the **Settings** tab, to add the callback URL in the **Allowed Callback URLs**: + + ``` text + `https://YOUR_AUTH0_DOMAIN://YOUR_BUNDLE_ID/ios/callback` + ``` + 5. Add your logout URLs in the **Allowed Logout URLs**. 6. Select the **API Access Tab**. -7. Select **Edit** for the **Auth0 My Account API** to select the User delegated Access permissions: +7. Select **Edit** for the **Auth0 My Account API** to add the **User-delegated Access** permissions: -### Configure scopes + Request only the permissions your application needs from the My Account API. -When you request the user's access token, request the scopes your application needs from the My Account API. + + ``` + create:me:authentication_methods + read:me:authentication_methods + update:me:authentication_methods + delete:me:authentication_methods + ``` + - - ``` - create:me:authentication_methods - read:me:authentication_methods - update:me:authentication_methods - delete:me:authentication_methods - ``` - +8. Select **Save** to save the permissions. -The user's access token only includes permissions they were granted during login. Request all four scopes if you want users to enroll, review, and remove authentication methods. - - -### Configure passkeys in your tenant (optional) - - -[Passkeys](/docs/authenticate/database-connections/passkeys/configure-passkey-policy) require custom domains to be enabled in your tenant. - -Passkeys require **iOS 16.6+**, macOS **13.5+**, or visionOS **1.0+**. - +* The user's access token only includes permissions that were granted during login. +* Request all four scopes to allow users to enroll, review, and remove authentication methods. -You can skip this step if you are not enabling passkey enrollment. -1. Navigate to [Dashboard > Authentication > Database](https://manage.auth0.com/#/connections/database). Open the database connection you want passkeys enabled on. -2. Under **Passkey settings**, toggle **Require Passkey Enrollment** as needed for your policy. -3. Register your iOS application bundle ID under **Allowed iOS Applications** so the platform authenticator can issue credentials for your Auth0 tenant. +### Configure your back-end application -Auth0 publishes the platform association file (`apple-app-site-association`) on your tenant domain automatically. +#### Install the SDK +Usee the Swift Package Manager or Carthage to install the `Auth0UniversalComponents` universal component. +To learn more about installation details and requirements, read [Auth0 Universal Components for iOS](/docs/get-started/universal-components/ios/ios-overview). +#### Initialize the SDK -## Configure your application +To initialize the SDK, call the `Auth0UniversalComponentsSDKInitializer.initialize(...)` method once at application start, typically in your application struct's `init`. -### Install the SDK +If your application already uses `Auth0.plist` to configure Auth0.swift, add `ClientId`, `Domain`, and `Audience` keys and call: -To install the `Auth0UniversalComponents` universal component, use the Swift Package Manager or Carthage. For installation details and requirements, read [Auth0 Universal Components for iOS](/docs/get-started/universal-components/ios/ios-overview). + ```swift App.swift wrap lines + import SwiftUI + import Auth0 + import Auth0UniversalComponents -### Initialize the SDK + @main + struct MyApp: App { + init() { + Auth0UniversalComponentsSDKInitializer.initialize( + tokenProvider: CredentialsManager(authentication: Auth0.authentication()) + ) + } -To initialize the SDK, call the `Auth0UniversalComponentsSDKInitializer.initialize(...)` method once at application start, typically in your application struct's `init`. If your application already uses `Auth0.plist` to configure Auth0.swift, add `ClientId`, `Domain`, and `Audience` keys and call: + var body: some Scene { + WindowGroup { ContentView() } + } + } + ``` -```swift App.swift wrap lines -import SwiftUI -import Auth0 -import Auth0UniversalComponents +Or pass the values directly in code: -@main -struct MyApp: App { - init() { + ```swift App.swift wrap lines Auth0UniversalComponentsSDKInitializer.initialize( + domain: "YOUR_AUTH0_DOMAIN", + clientId: "YOUR_CLIENT_ID", + audience: "https://YOUR_AUTH0_DOMAIN/me/", tokenProvider: CredentialsManager(authentication: Auth0.authentication()) ) - } - - var body: some Scene { - WindowGroup { ContentView() } - } -} -``` - -Or pass the values directly in code: - -```swift App.swift wrap lines -Auth0UniversalComponentsSDKInitializer.initialize( - domain: "YOUR_AUTH0_DOMAIN", - clientId: "YOUR_CLIENT_ID", - audience: "https://YOUR_AUTH0_DOMAIN/me/", - tokenProvider: CredentialsManager(authentication: Auth0.authentication()) -) -``` + ``` -### Configure the token provider +#### Configure the token provider The `TokenProvider` protocol is the interface the SDK uses to request credentials from your application. @@ -134,49 +126,27 @@ Auth0 recommends using the [`Auth0.swift`](https://github.com/auth0/Auth0.swift) If you manage credentials yourself, implement all four methods: -```swift wrap lines -struct AppTokenProvider: TokenProvider { - func fetchCredentials() async throws -> Credentials { - // Return the user's login credentials. - } - func storeCredentials(credentials: Credentials) { - // Persist new or refreshed credentials. - } - func store(apiCredentials: APICredentials, for audience: String) { - // Persist My Account API credentials keyed by audience. - } - func fetchAPICredentials(audience: String, scope: String) async throws -> APICredentials { - // Return cached My Account API credentials, refreshing if expired. - } -} -``` + ```swift wrap lines + struct AppTokenProvider: TokenProvider { + func fetchCredentials() async throws -> Credentials { + // Return the user's login credentials. + } + func storeCredentials(credentials: Credentials) { + // Persist new or refreshed credentials. + } + func store(apiCredentials: APICredentials, for audience: String) { + // Persist My Account API credentials keyed by audience. + } + func fetchAPICredentials(audience: String, scope: String) async throws -> APICredentials { + // Return cached My Account API credentials, refreshing if expired. + } + } + ``` -### Configure passkeys in the SDK (optional) - -To configure passkeys, implement the `PasskeysConfiguration` initializer to override default passkey behavior. All fields are optional. - -```swift wrap lines -let passkeys = PasskeysConfiguration( - userIdentityId: "auth0|abc123", - connection: "Username-Password-Authentication" -) - -Auth0UniversalComponentsSDKInitializer.initialize( - passkeyConfiguration: passkeys, - tokenProvider: credentialsManager -) -``` - -Add the Associated Domains entitlement to your Xcode target so the platform authenticator can issue credentials for your Auth0 tenant: - -```text wrap lines -webcredentials:YOUR_AUTH0_DOMAIN -``` - - Users must be authenticated before you render any component. After the SDK is initialized and your `TokenProvider` is wired up, drop the [Auth Methods Management](/docs/get-started/universal-components/ios/components/auth-methods-management) component into your settings screen to give users full MFA, passkey, and recovery-code self-service. + Users must be authenticated before you render any component. After the SDK is initialized and your `TokenProvider` protocol is wired up, add the `MyAccountAuthMethodsView` component into your settings screen to give users full MFA, passkey, and recovery-code self-service. ## Learn more diff --git a/main/docs/get-started/universal-components/ios/ios-overview.mdx b/main/docs/get-started/universal-components/ios/ios-overview.mdx index 39537fd995..f58e81b2d9 100644 --- a/main/docs/get-started/universal-components/ios/ios-overview.mdx +++ b/main/docs/get-started/universal-components/ios/ios-overview.mdx @@ -13,31 +13,34 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" /> -Auth0 [Universal Components for iOS](https://github.com/auth0/ui-components-ios) provide pre-built, embeddable UI for identity flows using [SwiftUI](https://developer.apple.com/swiftui). +The Auth0 [Universal Components for iOS](https://github.com/auth0/ui-components-ios) SDK provide pre-built, embeddable UI Auth0 identity flows using [SwiftUI](https://developer.apple.com/swiftui). -These components are built on top of the [Auth0 Swift SDK](https://github.com/auth0/Auth0.swift) and integrate with the [My Account APIs](/docs/manage-users/my-account-api). +Universal Components for iOS are built on top of the [Auth0 Swift SDK](https://github.com/auth0/Auth0.swift) and integrate with [My Account APIs](/docs/manage-users/my-account-api). ## Prerequisites -To use Universal Components for iOS, you need: +To configure Universal Components for iOS SDK, you need: * Operating systems: `iOS 16.0+`, `macOS 13.0+`, `visionOS 1.0+` * Programming language: `Swift 5+` (6 preferred), `Xcode 16+` -Auth0 [passkey](/docs/authenticate/database-connections/passkeys) support requires **iOS 16.6+**, **macOS 13.5+**, or **visionOS 1.0+**. +To enable Auth0 [passkey](/docs/authenticate/database-connections/passkeys) support, you need: **iOS 16.6+**, **macOS 13.5+**, or **visionOS 1.0+**. ## Install the SDK -Universal Components for iOS are distributed as the [`Auth0UniversalComponents`](/docs/get-started/universal-components/universal-components-overview) package. Use the Swift Package Manager to install the SDK. +Universal Components for iOS SDK are distributed as the [`Auth0UniversalComponents`](/docs/get-started/universal-components/universal-components-overview) package. ### Swift Package Manager -1. In Xcode, navigate to **File > Add Package Dependencies**. -2. Enter the following repository URL: +Auth0 recommends to use the Swift package manager to install the SDK: - ```text wrap lines +1. Open [**Xcode**](https://developer.apple.com/documentation/xcode) +2. Select **File > Add Package Dependencies**. +2. Add the following repository URL: + + ```text https://github.com/auth0/ui-components-ios.git ``` @@ -48,9 +51,9 @@ Universal Components for iOS are distributed as the [`Auth0UniversalComponents`] If you use the [Carthage](https://github.com/Carthage/Carthage) dependency manager: -1. Add the following to your Cartfile: +1. Add the following to your cartfile: - ```text wrap lines + ```text github "auth0/ui-components-ios" ~> 1.0.0 ``` @@ -60,22 +63,17 @@ If you use the [Carthage](https://github.com/Carthage/Carthage) dependency manag carthage update --use-xcframeworks ``` -### Verify the installation - -Import the `Auth0UniversalComponents` module in a Swift file to confirm the framework resolves: +### Verify the SDK installation -```swift wrap lines -import Auth0UniversalComponents -``` +To verify the Universal Components for iOS SDK intallation, import the `Auth0UniversalComponents` module in a Swift file to confirm that the framework resolves: -To continue, read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview) to wire authentication and render the [Authentication Methods Management](/docs/manage-users/my-account-api#manage-authentication-methods) UI. + ```swift wrap lines + import Auth0UniversalComponents + ``` ## Sample application -Review the sample application `AppUIComponents` in the [Universal Components for iOS](https://github.com/auth0/ui-components-ios/tree/main/AppUIComponents) GitHub repository. - -The sample application includes `AppUIComponentsApp.swift` for Auth0 Swift SDK initialization and `Common/ThemeManager.swift` for runtime theme switching. - +You can review the Universal Components for iOS sample application []`AppUIComponents`](https://github.com/auth0/ui-components-ios/tree/main/AppUIComponents), the sample application includes the `AppUIComponentsApp.swift` and the `Common/ThemeManager.swift` for Auth0 SDK initialization and runtime theme switching. ## Next steps diff --git a/main/docs/get-started/universal-components/ios/ios-theming.mdx b/main/docs/get-started/universal-components/ios/ios-theming.mdx index e1475bfe55..025db1e9a0 100644 --- a/main/docs/get-started/universal-components/ios/ios-theming.mdx +++ b/main/docs/get-started/universal-components/ios/ios-theming.mdx @@ -14,7 +14,7 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" Auth0 [Universal Components for iOS](https://github.com/auth0/ui-components-ios) use a design token model. Visual properties such as colors, typography, spacing, corner radii, and component sizes are each expressed as a token that you can override without changes to your layouts. -The default theme renders the standard Auth0 style without any configuration. You can provide your own theme to match your brand. +The default theme renders the Auth0 default theme, you can provide your own theme to match your branding. ## How theming works @@ -22,18 +22,18 @@ Universal Components for iOS use a SwiftUI `@Environment` property wrapper theme ### Zero configuration -If you do not configure a theme, Universal Components for iOS render the default Auth0 theme. The following example displays the account methods view without any customization: +If you do not configure a theme, Universal Components for iOS render the Auth0 default theme. The following example displays the account methods view without any customization: -```swift wrap lines -import SwiftUI -import Auth0UniversalComponents + ```swift wrap lines + import SwiftUI + import Auth0UniversalComponents -struct ContentView: View { - var body: some View { - MyAccountAuthMethodsView() - } -} -``` + struct ContentView: View { + var body: some View { + MyAccountAuthMethodsView() + } + } + ``` ### Override a subset of tokens @@ -41,91 +41,91 @@ You can override specific tokens while Universal Components for iOS render every The following example overrides only the primary background and text colors: -```swift wrap lines -import SwiftUI -import Auth0UniversalComponents - -struct ContentView: View { - var body: some View { - MyAccountAuthMethodsView() - .auth0Theme( - Auth0Theme( - colors: DefaultAuth0ColorTokens( - background: DefaultAuth0BackgroundColorTokens(primary: Color("BrandBlue")), - text: DefaultAuth0TextColorTokens(onPrimary: .white) + ```swift wrap lines + import SwiftUI + import Auth0UniversalComponents + + struct ContentView: View { + var body: some View { + MyAccountAuthMethodsView() + .auth0Theme( + Auth0Theme( + colors: DefaultAuth0ColorTokens( + background: DefaultAuth0BackgroundColorTokens(primary: Color("BrandBlue")), + text: DefaultAuth0TextColorTokens(onPrimary: .white) + ) + ) ) - ) - ) - } -} -``` + } + } + ``` -The same shape applies to typography, spacing, radius, and size tokens. +The same applies to typography, spacing, radius, and size tokens. The following example overrides typography and button radius: -```swift wrap lines -Auth0Theme( - typography: DefaultAuth0TypographyTokens( - body: Auth0TextStyle(font: .custom("Lato-Regular", size: 17), tracking: 0, lineSpacing: 7), - label: Auth0TextStyle(font: .custom("Lato-Medium", size: 16), tracking: 0.1, lineSpacing: 5) - ), - radius: DefaultAuth0RadiusTokens(button: 24) -) -``` + ```swift wrap lines + Auth0Theme( + typography: DefaultAuth0TypographyTokens( + body: Auth0TextStyle(font: .custom("Lato-Regular", size: 17), tracking: 0, lineSpacing: 7), + label: Auth0TextStyle(font: .custom("Lato-Medium", size: 16), tracking: 0.1, lineSpacing: 5) + ), + radius: DefaultAuth0RadiusTokens(button: 24) + ) + ``` ### Configure a full brand theme -For full brand alignment, provide your own theme that implements the three color category properties and wire them into an `Auth0ColorTokens` container: - -```swift wrap lines -struct BrandBackground: Auth0BackgroundColorTokens { - var primary: Color { Color("Background/Primary", bundle: .main) } - var primarySubtle: Color { Color("Background/Primary", bundle: .main).opacity(0.35) } - var inverse: Color { Color("Background/Inverse", bundle: .main) } - var accent: Color { Color("Background/Accent", bundle: .main) } - var layerTop: Color { Color("Background/LayerTop", bundle: .main) } - var layerMedium: Color { Color("Background/LayerMedium", bundle: .main) } - var layerBase: Color { Color("Background/LayerBase", bundle: .main) } - var error: Color { Color("Background/Error", bundle: .main) } - var errorSubtle: Color { Color("Background/ErrorSubtle", bundle: .main).opacity(0.35) } - var success: Color { Color("Background/Success", bundle: .main) } - var successSubtle: Color { Color("Background/SuccessSubtle", bundle: .main) } -} - -struct BrandColors: Auth0ColorTokens { - var background: any Auth0BackgroundColorTokens { BrandBackground() } - var text: any Auth0TextColorTokens { DefaultAuth0TextColorTokens() } - var border: any Auth0BorderColorTokens { DefaultAuth0BorderColorTokens() } -} - -MyAccountAuthMethodsView() - .auth0Theme(Auth0Theme(colors: BrandColors())) -``` - -### Read the theme in your own views +You can provide your own branding theme that implements the three color category properties and wire them into an `Auth0ColorTokens` container: + + ```swift wrap lines + struct BrandBackground: Auth0BackgroundColorTokens { + var primary: Color { Color("Background/Primary", bundle: .main) } + var primarySubtle: Color { Color("Background/Primary", bundle: .main).opacity(0.35) } + var inverse: Color { Color("Background/Inverse", bundle: .main) } + var accent: Color { Color("Background/Accent", bundle: .main) } + var layerTop: Color { Color("Background/LayerTop", bundle: .main) } + var layerMedium: Color { Color("Background/LayerMedium", bundle: .main) } + var layerBase: Color { Color("Background/LayerBase", bundle: .main) } + var error: Color { Color("Background/Error", bundle: .main) } + var errorSubtle: Color { Color("Background/ErrorSubtle", bundle: .main).opacity(0.35) } + var success: Color { Color("Background/Success", bundle: .main) } + var successSubtle: Color { Color("Background/SuccessSubtle", bundle: .main) } + } -Access `@Environment(\.auth0Theme)` to apply the same tokens in any Swift view: + struct BrandColors: Auth0ColorTokens { + var background: any Auth0BackgroundColorTokens { BrandBackground() } + var text: any Auth0TextColorTokens { DefaultAuth0TextColorTokens() } + var border: any Auth0BorderColorTokens { DefaultAuth0BorderColorTokens() } + } -```swift wrap lines -struct MyCustomStep: View { - @Environment(\.auth0Theme) private var theme + MyAccountAuthMethodsView() + .auth0Theme(Auth0Theme(colors: BrandColors())) + ``` - var body: some View { - VStack(spacing: theme.spacing.md) { - Text("Almost there!") - .auth0TextStyle(theme.typography.titleLarge) - .foregroundStyle(theme.colors.text.bold) +### Read the theme in your own views - Button("Continue") { /* ... */ } - .frame(height: theme.sizes.buttonHeight) - .background(theme.colors.background.primary) - .cornerRadius(theme.radius.button) +You can access the `@Environment(\.auth0Theme)` property wrapper to apply the same tokens to any Swift view: + + ```swift wrap lines + struct MyCustomStep: View { + @Environment(\.auth0Theme) private var theme + + var body: some View { + VStack(spacing: theme.spacing.md) { + Text("Almost there!") + .auth0TextStyle(theme.typography.titleLarge) + .foregroundStyle(theme.colors.text.bold) + + Button("Continue") { /* ... */ } + .frame(height: theme.sizes.buttonHeight) + .background(theme.colors.background.primary) + .cornerRadius(theme.radius.button) + } + .padding(theme.spacing.md) + } } - .padding(theme.spacing.md) - } -} -``` + ``` ### Token reference From 6e8904ba0c5d77010b505ef89247afd532ea4a83 Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 2 Jun 2026 11:47:07 +0200 Subject: [PATCH 18/50] Update --- .../get-started/universal-components/ios/ios-overview.mdx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/main/docs/get-started/universal-components/ios/ios-overview.mdx b/main/docs/get-started/universal-components/ios/ios-overview.mdx index f58e81b2d9..a549262b1f 100644 --- a/main/docs/get-started/universal-components/ios/ios-overview.mdx +++ b/main/docs/get-started/universal-components/ios/ios-overview.mdx @@ -73,7 +73,9 @@ To verify the Universal Components for iOS SDK intallation, import the `Auth0Uni ## Sample application -You can review the Universal Components for iOS sample application []`AppUIComponents`](https://github.com/auth0/ui-components-ios/tree/main/AppUIComponents), the sample application includes the `AppUIComponentsApp.swift` and the `Common/ThemeManager.swift` for Auth0 SDK initialization and runtime theme switching. +You can review the Universal Components for iOS sample application [`AppUIComponents`](https://github.com/auth0/ui-components-ios/tree/main/AppUIComponents). + +The sample application includes the `AppUIComponentsApp.swift` and the `Common/ThemeManager.swift` files for SDK initialization and runtime theme switching. ## Next steps From 0e5b3cb9ded5d4184895aad6e227dfad228cd20d Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 2 Jun 2026 11:50:24 +0200 Subject: [PATCH 19/50] Update --- .../get-started/universal-components/ios/ios-overview.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/main/docs/get-started/universal-components/ios/ios-overview.mdx b/main/docs/get-started/universal-components/ios/ios-overview.mdx index a549262b1f..1ad701b14f 100644 --- a/main/docs/get-started/universal-components/ios/ios-overview.mdx +++ b/main/docs/get-started/universal-components/ios/ios-overview.mdx @@ -67,9 +67,9 @@ If you use the [Carthage](https://github.com/Carthage/Carthage) dependency manag To verify the Universal Components for iOS SDK intallation, import the `Auth0UniversalComponents` module in a Swift file to confirm that the framework resolves: - ```swift wrap lines - import Auth0UniversalComponents - ``` + ```swift wrap lines + import Auth0UniversalComponents + ``` ## Sample application From a4bffb787735a3ef54bd5a04b2b0c7c79bfd8854 Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 2 Jun 2026 12:21:43 +0200 Subject: [PATCH 20/50] update --- .../ios/components/my-account-overview.mdx | 6 ++++-- .../get-started/universal-components/ios/ios-overview.mdx | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx index edb777a4ca..d19154d213 100644 --- a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx @@ -33,12 +33,14 @@ When an authenticated user opens their account settings screen, the [Auth0.swift ## Prerequisites -### Enable Auth0 My Account API +### Configure your Auth0 native application + +#### Enable Auth0 My Account API 1. Navigate to [Dashboard > Applications > APIs](https://manage.auth0.com/#/apis). 2. Select **Activate My Account API** to enable it for your tenant. -### Create an Auth0 application and configure My Account API permissions +#### Create the application and configure My Account API permissions 1. Navigate to [Dashboard > Applications](https://manage.auth0.com/#/applications). 2. Select **Create Application**. diff --git a/main/docs/get-started/universal-components/ios/ios-overview.mdx b/main/docs/get-started/universal-components/ios/ios-overview.mdx index 1ad701b14f..602fec603f 100644 --- a/main/docs/get-started/universal-components/ios/ios-overview.mdx +++ b/main/docs/get-started/universal-components/ios/ios-overview.mdx @@ -73,7 +73,7 @@ To verify the Universal Components for iOS SDK intallation, import the `Auth0Uni ## Sample application -You can review the Universal Components for iOS sample application [`AppUIComponents`](https://github.com/auth0/ui-components-ios/tree/main/AppUIComponents). +You can review the Universal Components for iOS sample application [`AppUIComponents`](https://github.com/auth0/ui-components-ios/tree/main/AppUIComponents) on GitHub. The sample application includes the `AppUIComponentsApp.swift` and the `Common/ThemeManager.swift` files for SDK initialization and runtime theme switching. From c164a51ca587c770731c295aa898eb07b0a2412d Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 2 Jun 2026 12:58:25 +0200 Subject: [PATCH 21/50] Update --- .../components/auth-methods-management.mdx | 98 ++++++----- .../ios/components/factors/passkeys.mdx | 36 ++-- .../ios/components/my-account-overview.mdx | 134 +++++++-------- .../universal-components/ios/ios-overview.mdx | 28 +-- .../universal-components/ios/ios-theming.mdx | 162 +++++++++--------- 5 files changed, 232 insertions(+), 226 deletions(-) diff --git a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx index bee3c92b55..133bd43c56 100644 --- a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx @@ -12,13 +12,11 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -The Universal Components for iOS SDK include the `MyAccountAuthMethodsView` component, a SwiftUI view that handles every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). - +The Universal Components for iOS SDK includes the `MyAccountAuthMethodsView` component, a SwiftUI view that handles every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). It uses the My Account API's [authentication methods management](/docs/manage-users/my-account-api#manage-authentication-methods) capabilities to render a complete UI for managing a user's authentication methods. - -Using the `MyAccountAuthMethodsView` component, you do not need to orchestrate navigation, call endpoints, or manage state. +With the `MyAccountAuthMethodsView` component, you do not need to orchestrate navigation, call endpoints, or manage state. ## Setup requirements @@ -44,23 +42,23 @@ The component handles every authentication method factor configured with the My Add the `MyAccountAuthMethodsView` component anywhere in your SwiftUI hierarchy, typically behind a settings navigation link. - ```swift SettingsView.swift wrap lines - import SwiftUI - import Auth0UniversalComponents - - struct SettingsView: View { - var body: some View { - NavigationStack { - List { - NavigationLink(destination: MyAccountAuthMethodsView()) { - Label("Authentication Methods", systemImage: "lock.shield") - } - } - .navigationTitle("Account Settings") +```swift SettingsView.swift wrap lines +import SwiftUI +import Auth0UniversalComponents + +struct SettingsView: View { + var body: some View { + NavigationStack { + List { + NavigationLink(destination: MyAccountAuthMethodsView()) { + Label("Authentication Methods", systemImage: "lock.shield") } } + .navigationTitle("Account Settings") } - ``` + } +} +``` The Swift view takes no initializer parameters. To customize behavior use SwiftUI view modifiers and environment values. @@ -80,17 +78,17 @@ Theming is applied to the component as a whole; individual factor screens inheri Use a custom `Auth0Theme` modifier to override design tokens across every screen the component renders: - ```swift wrap lines - MyAccountAuthMethodsView() - .auth0Theme( - Auth0Theme( - colors: DefaultAuth0ColorTokens( - background: DefaultAuth0BackgroundColorTokens(primary: Color("BrandBlue")), - text: DefaultAuth0TextColorTokens(onPrimary: .white) - ) - ) +```swift wrap lines +MyAccountAuthMethodsView() + .auth0Theme( + Auth0Theme( + colors: DefaultAuth0ColorTokens( + background: DefaultAuth0BackgroundColorTokens(primary: Color("BrandBlue")), + text: DefaultAuth0TextColorTokens(onPrimary: .white) ) - ``` + ) + ) +``` To learn more about the full token catalog and dark-mode patterns, read [Customize Style and Themes](/docs/get-started/universal-components/ios/ios-theming). @@ -102,35 +100,35 @@ By default, the `MyAccountAuthMethodsView` component manages its own `Navigation If your application already owns a navigation stack, nesting a second stack breaks back-button behavior and swipe-to-go-back gestures. Embed the `MyAccountAuthMethodsView` component into your stack instead. - ```swift wrap lines - import SwiftUI - import Auth0UniversalComponents - - struct AccountScreen: View { - @State private var path = NavigationPath() - - var body: some View { - NavigationStack(path: $path) { - List { - NavigationLink("Authentication methods", value: "auth-methods") - } - .navigationDestination(for: String.self) { value in - if value == "auth-methods" { - MyAccountAuthMethodsView() - .embeddedInNavigationStack() - } - } +```swift wrap lines +import SwiftUI +import Auth0UniversalComponents + +struct AccountScreen: View { + @State private var path = NavigationPath() + + var body: some View { + NavigationStack(path: $path) { + List { + NavigationLink("Authentication methods", value: "auth-methods") + } + .navigationDestination(for: String.self) { value in + if value == "auth-methods" { + MyAccountAuthMethodsView() + .embeddedInNavigationStack() } - .environment(\.hostNavigationPath, $path) } } - ``` + .environment(\.hostNavigationPath, $path) + } +} +``` There are two requirements when using embedded mode: -* Add the `.embeddedInNavigationStack()` modifier to `MyAccountAuthMethodsView` component to skips creating an inner stack. +* Add the `.embeddedInNavigationStack()` modifier to the `MyAccountAuthMethodsView` component so it skips creating an inner stack. -* Add the `\.hostNavigationPath` mofidier to the outer `NavigationStack` so the SDK knows which path binding to push onto. +* Add the `\.hostNavigationPath` modifier to the outer `NavigationStack` so the SDK knows which path binding to push onto. The SDK also exposes a `Router` helper class for applications that want a type-safe navigation controller for their own routes. diff --git a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx index 85558fc96e..1773dd7d8b 100644 --- a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx @@ -1,5 +1,5 @@ --- -title: Passkeys on Universal Component for iOS +title: Passkeys on iOS description: SDK-specific behavior, application-side entitlements, and customization for the passkey factor rendered inside the Authentication Methods Management component on iOS. sidebarTitle: Passkeys --- @@ -16,41 +16,53 @@ The [`MyAccountAuthMethodsView`](/docs/get-started/universal-components/ios/comp The passkey enrollment flow renders an educational screen, a WebAuthn registration handshake with the platform authenticator, and the enrolled-factor entry in the authenticator list. -Unlike other factors, Auth0 [Passkeys](/docs/authenticate/database-connections/passkeys) require application-side platform entitlements that the Universal Components for iOS SDK cannot configure. +Unlike other factors, Auth0 [passkeys](/docs/authenticate/database-connections/passkeys) require application-side platform entitlements that the Universal Components for iOS SDK cannot configure. ## Prerequisites -To enable platform entitlements for Universal Component for iOS SDK passkeys support: +To enable passkey support in the Universal Components for iOS SDK: * **Enable passkeys on your Auth0 database connection**. To learn how to enable passkeys in your Auth0 tenant, read [Passkeys](/docs/authenticate/database-connections/passkeys/configure-passkey-policy). * **Install and configure Universal Components for iOS**. To install Universal Components, configure your Auth0 tenant, and initialize the SDK, read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview). -* **Confirm OS version**. Passkeys is supported on devices running **iOS 16.6+**, macOS **13.5+**, or visionOS **1.0+**. +* **Confirm OS version**. Passkeys are supported on devices running **iOS 16.6+**, **macOS 13.5+**, or **visionOS 1.0+**. -* **Register your Apple Bundle identifier in your native application** To learn more, read [Enable Universal Links Support in Apple Xcode](/docs/get-started/applications/enable-universal-links-support-in-apple-xcode#obtain-apple-team-id-and-bundle-identifier). +* **Register your Apple bundle identifier in your native application**. To learn more, read [Enable Universal Links Support in Apple Xcode](/docs/get-started/applications/enable-universal-links-support-in-apple-xcode#obtain-apple-team-id-and-bundle-identifier). ## Platform setup ### Add the associated domain in Xcode -Passkeys bind credentials to your Auth0 tenant's [custom domain](/docs/customize/custom-domains), add your custom domain to your application: +Passkeys bind credentials to your Auth0 tenant's [custom domain](/docs/customize/custom-domains). Add your custom domain to your application: -* Open [**Xcode**](https://developer.apple.com/documentation/xcode) -* Select your target's **Signing & Capabilities** -* Add a **Capability** and select **Associated Domains** - Enter your Auth0 custom domain: +1. Open [**Xcode**](https://developer.apple.com/documentation/xcode). +2. Select your target's **Signing & Capabilities**. +3. Add a **Capability** and select **Associated Domains**. +4. Enter your Auth0 custom domain: ```text wrap lines webcredentials:YOUR_AUTH0_DOMAIN ``` +### Register your application bundle ID in the Auth0 Dashboard + +1. Navigate to [**Auth0 Dashboard > Authentication > Database**](https://manage.auth0.com/#/connections/database). +2. Select the database connection you want passkeys enabled on. +3. Select the **Passkey settings** tab. +4. Add your application bundle ID under **Allowed iOS Applications**. + +Auth0 publishes the `apple-app-site-association` file at `/.well-known/apple-app-site-association` on your domain automatically and includes every registered bundle ID. + + +Apple's [supporting associated domains](https://developer.apple.com/documentation/xcode/supporting-associated-domains) guide is the authoritative reference for entitlements and the Apple App Site Association (AASA) file. Validate your AASA file with the [AASA Validator](https://app-site-association.cdn-apple.com/) before testing on-device. + ## Customization -The passkey educational and status screens inherit the `MyAccountAuthMethodsView` component active theme. +The passkey educational and status screens inherit the `MyAccountAuthMethodsView` component's active theme. The biometric prompt itself is rendered by the OS and cannot be themed. @@ -77,7 +89,7 @@ To learn more about the full token catalog, read [Customize Style and Themes](/d - Auth Methods Management component reference and the full list of supported factors. + Review the `MyAccountAuthMethodsView` component reference and the full list of supported factors. diff --git a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx index d19154d213..4db3c7197c 100644 --- a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx @@ -12,9 +12,9 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -Auth0 Universal Components for iOS allow you to build a self-service account security UI within your [native iOS application](https://auth0.com/docs/get-started/auth0-overview/create-applications#create-application-in-auth0). +Auth0 Universal Components for iOS allow you to build a self-service account security UI within your [native iOS application](/docs/get-started/auth0-overview/create-applications#create-application-in-auth0). -Using the Universal component `MyAccountAuthMethodsView` you can let users manage their own authentication methods. such as, multi-factor authentication (MFA) factors, passkeys, and recovery codes directly inside your application, without leaving for a web browser or contacting support. +With the `MyAccountAuthMethodsView` component, users can manage their own authentication methods — multi-factor authentication (MFA) factors, passkeys, and recovery codes — directly inside your application, without leaving for a web browser or contacting support. ## How it works @@ -33,40 +33,38 @@ When an authenticated user opens their account settings screen, the [Auth0.swift ## Prerequisites -### Configure your Auth0 native application - -#### Enable Auth0 My Account API +### Enable Auth0 My Account API 1. Navigate to [Dashboard > Applications > APIs](https://manage.auth0.com/#/apis). 2. Select **Activate My Account API** to enable it for your tenant. -#### Create the application and configure My Account API permissions +### Create the application and configure My Account API permissions 1. Navigate to [Dashboard > Applications](https://manage.auth0.com/#/applications). 2. Select **Create Application**. 3. Select **Native**. -4. Select the **Settings** tab, to add the callback URL in the **Allowed Callback URLs**: +4. Select the **Settings** tab to add the callback URL in the **Allowed Callback URLs**: - ``` text - `https://YOUR_AUTH0_DOMAIN://YOUR_BUNDLE_ID/ios/callback` - ``` + ```text wrap lines + https://YOUR_AUTH0_DOMAIN/YOUR_BUNDLE_ID/ios/callback + ``` 5. Add your logout URLs in the **Allowed Logout URLs**. -6. Select the **API Access Tab**. +6. Select the **API Access** tab. 7. Select **Edit** for the **Auth0 My Account API** to add the **User-delegated Access** permissions: - Request only the permissions your application needs from the My Account API. + Request only the permissions your application needs from the My Account API. - - ``` - create:me:authentication_methods - read:me:authentication_methods - update:me:authentication_methods - delete:me:authentication_methods - ``` - + + ```text wrap lines + create:me:authentication_methods + read:me:authentication_methods + update:me:authentication_methods + delete:me:authentication_methods + ``` + -8. Select **Save** to save the permissions. +8. Select **Save** to save the permissions. * The user's access token only includes permissions that were granted during login. @@ -74,50 +72,48 @@ When an authenticated user opens their account settings screen, the [Auth0.swift -### Configure your back-end application - -#### Install the SDK +### Install the SDK -Usee the Swift Package Manager or Carthage to install the `Auth0UniversalComponents` universal component. +Use the Swift Package Manager or Carthage to install Auth0UniversalComponents. To learn more about installation details and requirements, read [Auth0 Universal Components for iOS](/docs/get-started/universal-components/ios/ios-overview). -#### Initialize the SDK +### Initialize the SDK To initialize the SDK, call the `Auth0UniversalComponentsSDKInitializer.initialize(...)` method once at application start, typically in your application struct's `init`. If your application already uses `Auth0.plist` to configure Auth0.swift, add `ClientId`, `Domain`, and `Audience` keys and call: - ```swift App.swift wrap lines - import SwiftUI - import Auth0 - import Auth0UniversalComponents - - @main - struct MyApp: App { - init() { - Auth0UniversalComponentsSDKInitializer.initialize( - tokenProvider: CredentialsManager(authentication: Auth0.authentication()) - ) - } - - var body: some Scene { - WindowGroup { ContentView() } - } - } - ``` - -Or pass the values directly in code: +```swift App.swift wrap lines +import SwiftUI +import Auth0 +import Auth0UniversalComponents - ```swift App.swift wrap lines +@main +struct MyApp: App { + init() { Auth0UniversalComponentsSDKInitializer.initialize( - domain: "YOUR_AUTH0_DOMAIN", - clientId: "YOUR_CLIENT_ID", - audience: "https://YOUR_AUTH0_DOMAIN/me/", tokenProvider: CredentialsManager(authentication: Auth0.authentication()) ) - ``` + } + + var body: some Scene { + WindowGroup { ContentView() } + } +} +``` + +Or pass the values directly in code: + +```swift App.swift wrap lines +Auth0UniversalComponentsSDKInitializer.initialize( + domain: "YOUR_AUTH0_DOMAIN", + clientId: "YOUR_CLIENT_ID", + audience: "https://YOUR_AUTH0_DOMAIN/me/", + tokenProvider: CredentialsManager(authentication: Auth0.authentication()) +) +``` -#### Configure the token provider +### Configure the token provider The `TokenProvider` protocol is the interface the SDK uses to request credentials from your application. @@ -128,27 +124,27 @@ Auth0 recommends using the [`Auth0.swift`](https://github.com/auth0/Auth0.swift) If you manage credentials yourself, implement all four methods: - ```swift wrap lines - struct AppTokenProvider: TokenProvider { - func fetchCredentials() async throws -> Credentials { - // Return the user's login credentials. - } - func storeCredentials(credentials: Credentials) { - // Persist new or refreshed credentials. - } - func store(apiCredentials: APICredentials, for audience: String) { - // Persist My Account API credentials keyed by audience. - } - func fetchAPICredentials(audience: String, scope: String) async throws -> APICredentials { - // Return cached My Account API credentials, refreshing if expired. - } - } - ``` +```swift wrap lines +struct AppTokenProvider: TokenProvider { + func fetchCredentials() async throws -> Credentials { + // Return the user's login credentials. + } + func storeCredentials(credentials: Credentials) { + // Persist new or refreshed credentials. + } + func store(apiCredentials: APICredentials, for audience: String) { + // Persist My Account API credentials keyed by audience. + } + func fetchAPICredentials(audience: String, scope: String) async throws -> APICredentials { + // Return cached My Account API credentials, refreshing if expired. + } +} +``` - Users must be authenticated before you render any component. After the SDK is initialized and your `TokenProvider` protocol is wired up, add the `MyAccountAuthMethodsView` component into your settings screen to give users full MFA, passkey, and recovery-code self-service. + Users must be authenticated before you render any component. After the SDK is initialized and your `TokenProvider` protocol is wired up, add the [`MyAccountAuthMethodsView`](/docs/get-started/universal-components/ios/components/auth-methods-management) component to your settings screen to give users full MFA, passkey, and recovery-code self-service. ## Learn more diff --git a/main/docs/get-started/universal-components/ios/ios-overview.mdx b/main/docs/get-started/universal-components/ios/ios-overview.mdx index 602fec603f..385a612ca7 100644 --- a/main/docs/get-started/universal-components/ios/ios-overview.mdx +++ b/main/docs/get-started/universal-components/ios/ios-overview.mdx @@ -13,13 +13,13 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" /> -The Auth0 [Universal Components for iOS](https://github.com/auth0/ui-components-ios) SDK provide pre-built, embeddable UI Auth0 identity flows using [SwiftUI](https://developer.apple.com/swiftui). +The Auth0 [Universal Components for iOS](https://github.com/auth0/ui-components-ios) SDK provides pre-built, embeddable UI for Auth0 identity flows using [SwiftUI](https://developer.apple.com/swiftui). Universal Components for iOS are built on top of the [Auth0 Swift SDK](https://github.com/auth0/Auth0.swift) and integrate with [My Account APIs](/docs/manage-users/my-account-api). ## Prerequisites -To configure Universal Components for iOS SDK, you need: +To configure the Universal Components for iOS SDK, you need: * Operating systems: `iOS 16.0+`, `macOS 13.0+`, `visionOS 1.0+` * Programming language: `Swift 5+` (6 preferred), `Xcode 16+` @@ -30,28 +30,28 @@ To enable Auth0 [passkey](/docs/authenticate/database-connections/passkeys) supp ## Install the SDK -Universal Components for iOS SDK are distributed as the [`Auth0UniversalComponents`](/docs/get-started/universal-components/universal-components-overview) package. +The Universal Components for iOS SDK is distributed as the [`Auth0UniversalComponents`](/docs/get-started/universal-components/universal-components-overview) package. ### Swift Package Manager -Auth0 recommends to use the Swift package manager to install the SDK: +Auth0 recommends using the Swift Package Manager to install the SDK: -1. Open [**Xcode**](https://developer.apple.com/documentation/xcode) +1. Open [**Xcode**](https://developer.apple.com/documentation/xcode). 2. Select **File > Add Package Dependencies**. -2. Add the following repository URL: +3. Add the following repository URL: ```text https://github.com/auth0/ui-components-ios.git ``` -3. Select version `1.0.0-beta.0` or later. -4. Add `Auth0UniversalComponents` to your application target. +4. Select version `1.0.0-beta.0` or later. +5. Add `Auth0UniversalComponents` to your application target. ### Carthage If you use the [Carthage](https://github.com/Carthage/Carthage) dependency manager: -1. Add the following to your cartfile: +1. Add the following to your Cartfile: ```text github "auth0/ui-components-ios" ~> 1.0.0 @@ -65,11 +65,11 @@ If you use the [Carthage](https://github.com/Carthage/Carthage) dependency manag ### Verify the SDK installation -To verify the Universal Components for iOS SDK intallation, import the `Auth0UniversalComponents` module in a Swift file to confirm that the framework resolves: +To verify the Universal Components for iOS SDK installation, import the `Auth0UniversalComponents` module in a Swift file to confirm that the framework resolves: - ```swift wrap lines - import Auth0UniversalComponents - ``` +```swift wrap lines +import Auth0UniversalComponents +``` ## Sample application @@ -85,6 +85,6 @@ The sample application includes the `AppUIComponentsApp.swift` and the `Common/T - Prepare your Auth0 tenant, initialize the SDK, and render the auth-methods management UI. + Prepare your Auth0 tenant, initialize the SDK, and render the authentication-methods management UI. diff --git a/main/docs/get-started/universal-components/ios/ios-theming.mdx b/main/docs/get-started/universal-components/ios/ios-theming.mdx index 025db1e9a0..2b5345b924 100644 --- a/main/docs/get-started/universal-components/ios/ios-theming.mdx +++ b/main/docs/get-started/universal-components/ios/ios-theming.mdx @@ -14,7 +14,7 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" Auth0 [Universal Components for iOS](https://github.com/auth0/ui-components-ios) use a design token model. Visual properties such as colors, typography, spacing, corner radii, and component sizes are each expressed as a token that you can override without changes to your layouts. -The default theme renders the Auth0 default theme, you can provide your own theme to match your branding. +Universal Components ship with a default Auth0 theme. You can provide your own theme to match your brand. ## How theming works @@ -24,16 +24,16 @@ Universal Components for iOS use a SwiftUI `@Environment` property wrapper theme If you do not configure a theme, Universal Components for iOS render the Auth0 default theme. The following example displays the account methods view without any customization: - ```swift wrap lines - import SwiftUI - import Auth0UniversalComponents +```swift wrap lines +import SwiftUI +import Auth0UniversalComponents - struct ContentView: View { - var body: some View { - MyAccountAuthMethodsView() - } - } - ``` +struct ContentView: View { + var body: some View { + MyAccountAuthMethodsView() + } +} +``` ### Override a subset of tokens @@ -41,91 +41,91 @@ You can override specific tokens while Universal Components for iOS render every The following example overrides only the primary background and text colors: - ```swift wrap lines - import SwiftUI - import Auth0UniversalComponents - - struct ContentView: View { - var body: some View { - MyAccountAuthMethodsView() - .auth0Theme( - Auth0Theme( - colors: DefaultAuth0ColorTokens( - background: DefaultAuth0BackgroundColorTokens(primary: Color("BrandBlue")), - text: DefaultAuth0TextColorTokens(onPrimary: .white) - ) - ) +```swift wrap lines +import SwiftUI +import Auth0UniversalComponents + +struct ContentView: View { + var body: some View { + MyAccountAuthMethodsView() + .auth0Theme( + Auth0Theme( + colors: DefaultAuth0ColorTokens( + background: DefaultAuth0BackgroundColorTokens(primary: Color("BrandBlue")), + text: DefaultAuth0TextColorTokens(onPrimary: .white) ) - } - } - ``` + ) + ) + } +} +``` The same applies to typography, spacing, radius, and size tokens. The following example overrides typography and button radius: - ```swift wrap lines - Auth0Theme( - typography: DefaultAuth0TypographyTokens( - body: Auth0TextStyle(font: .custom("Lato-Regular", size: 17), tracking: 0, lineSpacing: 7), - label: Auth0TextStyle(font: .custom("Lato-Medium", size: 16), tracking: 0.1, lineSpacing: 5) - ), - radius: DefaultAuth0RadiusTokens(button: 24) - ) - ``` +```swift wrap lines +Auth0Theme( + typography: DefaultAuth0TypographyTokens( + body: Auth0TextStyle(font: .custom("Lato-Regular", size: 17), tracking: 0, lineSpacing: 7), + label: Auth0TextStyle(font: .custom("Lato-Medium", size: 16), tracking: 0.1, lineSpacing: 5) + ), + radius: DefaultAuth0RadiusTokens(button: 24) +) +``` ### Configure a full brand theme -You can provide your own branding theme that implements the three color category properties and wire them into an `Auth0ColorTokens` container: - - ```swift wrap lines - struct BrandBackground: Auth0BackgroundColorTokens { - var primary: Color { Color("Background/Primary", bundle: .main) } - var primarySubtle: Color { Color("Background/Primary", bundle: .main).opacity(0.35) } - var inverse: Color { Color("Background/Inverse", bundle: .main) } - var accent: Color { Color("Background/Accent", bundle: .main) } - var layerTop: Color { Color("Background/LayerTop", bundle: .main) } - var layerMedium: Color { Color("Background/LayerMedium", bundle: .main) } - var layerBase: Color { Color("Background/LayerBase", bundle: .main) } - var error: Color { Color("Background/Error", bundle: .main) } - var errorSubtle: Color { Color("Background/ErrorSubtle", bundle: .main).opacity(0.35) } - var success: Color { Color("Background/Success", bundle: .main) } - var successSubtle: Color { Color("Background/SuccessSubtle", bundle: .main) } - } +Provide your own branding theme that implements the three color category properties, then wire them into an `Auth0ColorTokens` container: + +```swift wrap lines +struct BrandBackground: Auth0BackgroundColorTokens { + var primary: Color { Color("Background/Primary", bundle: .main) } + var primarySubtle: Color { Color("Background/Primary", bundle: .main).opacity(0.35) } + var inverse: Color { Color("Background/Inverse", bundle: .main) } + var accent: Color { Color("Background/Accent", bundle: .main) } + var layerTop: Color { Color("Background/LayerTop", bundle: .main) } + var layerMedium: Color { Color("Background/LayerMedium", bundle: .main) } + var layerBase: Color { Color("Background/LayerBase", bundle: .main) } + var error: Color { Color("Background/Error", bundle: .main) } + var errorSubtle: Color { Color("Background/ErrorSubtle", bundle: .main).opacity(0.35) } + var success: Color { Color("Background/Success", bundle: .main) } + var successSubtle: Color { Color("Background/SuccessSubtle", bundle: .main) } +} + +struct BrandColors: Auth0ColorTokens { + var background: any Auth0BackgroundColorTokens { BrandBackground() } + var text: any Auth0TextColorTokens { DefaultAuth0TextColorTokens() } + var border: any Auth0BorderColorTokens { DefaultAuth0BorderColorTokens() } +} + +MyAccountAuthMethodsView() + .auth0Theme(Auth0Theme(colors: BrandColors())) +``` - struct BrandColors: Auth0ColorTokens { - var background: any Auth0BackgroundColorTokens { BrandBackground() } - var text: any Auth0TextColorTokens { DefaultAuth0TextColorTokens() } - var border: any Auth0BorderColorTokens { DefaultAuth0BorderColorTokens() } - } +### Read the theme in your own views - MyAccountAuthMethodsView() - .auth0Theme(Auth0Theme(colors: BrandColors())) - ``` +Access the `@Environment(\.auth0Theme)` property wrapper to apply the same tokens in any Swift view: -### Read the theme in your own views +```swift wrap lines +struct MyCustomStep: View { + @Environment(\.auth0Theme) private var theme + + var body: some View { + VStack(spacing: theme.spacing.md) { + Text("Almost there!") + .auth0TextStyle(theme.typography.titleLarge) + .foregroundStyle(theme.colors.text.bold) -You can access the `@Environment(\.auth0Theme)` property wrapper to apply the same tokens to any Swift view: - - ```swift wrap lines - struct MyCustomStep: View { - @Environment(\.auth0Theme) private var theme - - var body: some View { - VStack(spacing: theme.spacing.md) { - Text("Almost there!") - .auth0TextStyle(theme.typography.titleLarge) - .foregroundStyle(theme.colors.text.bold) - - Button("Continue") { /* ... */ } - .frame(height: theme.sizes.buttonHeight) - .background(theme.colors.background.primary) - .cornerRadius(theme.radius.button) - } - .padding(theme.spacing.md) - } + Button("Continue") { /* ... */ } + .frame(height: theme.sizes.buttonHeight) + .background(theme.colors.background.primary) + .cornerRadius(theme.radius.button) } - ``` + .padding(theme.spacing.md) + } +} +``` ### Token reference From 8a1d35ee4b873cadf174acc5594a648715f5d00b Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 2 Jun 2026 13:06:00 +0200 Subject: [PATCH 22/50] Update --- .../ios/components/factors/passkeys.mdx | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx index 1773dd7d8b..a3027c4508 100644 --- a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx @@ -47,19 +47,6 @@ Passkeys bind credentials to your Auth0 tenant's [custom domain](/docs/customize webcredentials:YOUR_AUTH0_DOMAIN ``` -### Register your application bundle ID in the Auth0 Dashboard - -1. Navigate to [**Auth0 Dashboard > Authentication > Database**](https://manage.auth0.com/#/connections/database). -2. Select the database connection you want passkeys enabled on. -3. Select the **Passkey settings** tab. -4. Add your application bundle ID under **Allowed iOS Applications**. - -Auth0 publishes the `apple-app-site-association` file at `/.well-known/apple-app-site-association` on your domain automatically and includes every registered bundle ID. - - -Apple's [supporting associated domains](https://developer.apple.com/documentation/xcode/supporting-associated-domains) guide is the authoritative reference for entitlements and the Apple App Site Association (AASA) file. Validate your AASA file with the [AASA Validator](https://app-site-association.cdn-apple.com/) before testing on-device. - - ## Customization The passkey educational and status screens inherit the `MyAccountAuthMethodsView` component's active theme. From 61e1913bcea342fe2ba51533961443ea9c229ce5 Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 2 Jun 2026 16:36:04 +0200 Subject: [PATCH 23/50] Update --- .../android/android-overview.mdx | 80 +++--- .../android/android-theming.mdx | 153 +++++------ .../components/auth-methods-management.mdx | 123 +++------ .../android/components/factors/passkeys.mdx | 87 +++---- .../components/my-account-overview.mdx | 239 +++++++++--------- .../ios/components/my-account-overview.mdx | 2 +- 6 files changed, 290 insertions(+), 394 deletions(-) diff --git a/main/docs/get-started/universal-components/android/android-overview.mdx b/main/docs/get-started/universal-components/android/android-overview.mdx index 0c013591a8..5a2809be69 100644 --- a/main/docs/get-started/universal-components/android/android-overview.mdx +++ b/main/docs/get-started/universal-components/android/android-overview.mdx @@ -1,5 +1,5 @@ --- -title: Universal Components for Android applications +title: Universal Components for Android Applications description: Learn how to install and configure Auth0 Universal Components for Android applications. sidebarTitle: Install and Configure Universal Components --- @@ -13,17 +13,17 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" /> -Auth0 Universal Components for [Native Applications](/docs/get-started/auth0-overview/create-applications/native-apps#register-native-applications) ships pre-built, embeddable UI for identity flows on Android using [Jetpack Compose](https://developer.android.com/compose). +Auth0 Universal Components for Android ship pre-built, embeddable UI for identity flows in [native applications](/docs/get-started/auth0-overview/create-applications/native-apps#register-native-applications) using [Jetpack Compose](https://developer.android.com/compose). ## Prerequisites To use Auth0 Universal Components for Android: -* The base SDK supports **Android 11+** (API 30); Passkeys specifically require **Android 14+**. +* The base SDK supports **Android 11+** (API 30); passkeys specifically require **Android 14+**. * **Kotlin 2.2+**, **Android Gradle Plugin 8.11+**, **Jetpack Compose BOM 2024.09.00+**, **JDK 17+**. -Auth0 [Passkeys](/docs/authenticate/database-connections/passkeys) support requires **Android 14+** for Android devices. +Auth0 [passkey](/docs/authenticate/database-connections/passkeys) support requires **Android 14+**. ## Install the SDK @@ -32,9 +32,9 @@ The Android SDK is distributed through the [Maven Central](https://mvnrepository ### Gradle -1. Add the `mavencentral()` repository if it is not listed in your `settings.gradle` or `settings.gradle.kts` file: +1. Add the `mavenCentral()` repository if it is not listed in your `settings.gradle` or `settings.gradle.kts` file: - ```kotlin + ```kotlin wrap lines dependencyResolutionManagement { repositories { mavenCentral() @@ -45,49 +45,25 @@ The Android SDK is distributed through the [Maven Central](https://mvnrepository 2. Add the dependency to your module-level `build.gradle` or `build.gradle.kts`: - ```kotlin + ```kotlin wrap lines dependencies { - implementation 'com.auth0.universalcomponents:universal-components:1.0.0-beta.0' + implementation("com.auth0.universalcomponents:universal-components:1.0.0-beta.0") } ``` ### Minimum supported versions - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
RequirementVersion
Android minSdk30 (Android 11)
Kotlin2.2+
Android Gradle Plugin8.11+
Jetpack Compose BOM2024.09.00+
Auth0 Android SDK3.14.0 (resolved transitively)
JDK17+
+| **Requirement** | **Version** | +|-----------------|-------------| +| **Android minSdk** | 30 (Android 11) | +| **Kotlin** | 2.2+ | +| **Android Gradle Plugin** | 8.11+ | +| **Jetpack Compose BOM** | 2024.09.00+ | +| **Auth0 Android SDK** | 3.14.0 (resolved transitively) | +| **JDK** | 17+ | -Auth0 recommends using [**Auth0.Android v3+**](https://github.com/auth0/Auth0.Android) toolkit in your application to avoid compilation errors. +Auth0 recommends using [Auth0.Android v3+](https://github.com/auth0/Auth0.Android) in your application. Older versions may cause compilation errors when resolved alongside Universal Components. @@ -95,7 +71,7 @@ Auth0 recommends using [**Auth0.Android v3+**](https://github.com/auth0/Auth0.An Ensure [Compose](https://developer.android.com/develop/ui/compose/setup-compose-dependencies-and-compiler#setup-compose-dependencies) is enabled in your application's `build.gradle` file: -```kotlin +```kotlin wrap lines android { buildFeatures { compose = true @@ -103,11 +79,21 @@ android { } ``` -### Sample application -You can review the sample application in the Auth0 [ui-components-android GitHub repo](https://github.com/auth0/ui-components-android#documentation) for a reference implementation. -It includes `MainActivity.kt` for Auth0 SDK setup and SDK initialization and `LoginSecurityScreen.kt` for renders of the `AuthenticatorSettingsComponent`. +### Verify the installation -Once the SDK is installed, you can continue to [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview) to wire authentication and render the `auth-methods` management UI. +Confirm the dependency resolves by running: + +```bash wrap lines +./gradlew app:dependencies | grep universal-components +``` + +After the SDK is installed, continue to [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview) to wire authentication and render the authentication-methods management UI. + +## Sample application + +Review the sample application in the Auth0 [ui-components-android](https://github.com/auth0/ui-components-android#documentation) GitHub repository. + +The sample application includes `MainActivity.kt` for Auth0 SDK setup and initialization and `LoginSecurityScreen.kt` for rendering the `AuthenticatorSettingsComponent`. ## Next steps @@ -116,6 +102,6 @@ Once the SDK is installed, you can continue to [Build a Self-Service Account Sec - Prepare your Auth0 tenant, initialize the SDK, and render the auth-methods management UI. + Prepare your Auth0 tenant, initialize the SDK, and render the authentication-methods management UI. diff --git a/main/docs/get-started/universal-components/android/android-theming.mdx b/main/docs/get-started/universal-components/android/android-theming.mdx index 5fd8adde5d..f17f5133d0 100644 --- a/main/docs/get-started/universal-components/android/android-theming.mdx +++ b/main/docs/get-started/universal-components/android/android-theming.mdx @@ -12,15 +12,15 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -Auth0 Universal Components for Android uses a design token model. +Auth0 Universal Components for Android use a design token model. -Every visual property, such as colors, typography, spacing, corner radii, and component sizes are expressed as a named `token` where you can override one value without rewriting layouts. +Visual properties such as colors, typography, spacing, corner radii, and component sizes are each expressed as a named token. Override a single value without changes to your layouts. -The default theme renders the standard Auth0 style without any configuration, you only need to supply your own theme to match your brand. +Universal Components ship with a default Auth0 theme. You can provide your own theme to match your brand. -## Customize style and themes +## How theming works -The [Android SDK](https://github.com/auth0/ui-components-android) uses a Jetpack Compose theme that mirrors Material 3's MaterialTheme pattern. +The [Android SDK](https://github.com/auth0/ui-components-android) uses a Jetpack Compose theme that mirrors Material 3's `MaterialTheme` pattern. You can wrap SDK content using `Auth0Theme { ... }` to provide tokens, or pass `themeConfiguration` directly to `AuthenticatorSettingsComponent`. @@ -30,7 +30,7 @@ You can read tokens inside any composable using `Auth0Theme.colors`, `Auth0Theme If you do not configure a theme, the Android SDK renders the default Auth0 theme: -```kotlin +```kotlin wrap lines @Composable fun MFASettingsScreen() { AuthenticatorSettingsComponent() @@ -39,9 +39,9 @@ fun MFASettingsScreen() { ### Override a subset of tokens -You can select which tokens to override using the `Auth0Color.light().copy(...)`, `Auth0Color.dark()`, or `Auth0Typography.default().copy(...)` tokens. +Override individual tokens with `Auth0Color.light().copy(...)`, `Auth0Color.dark()`, or `Auth0Typography.default().copy(...)`. -```kotlin +```kotlin wrap lines @Composable fun MFASettingsScreen() { AuthenticatorSettingsComponent( @@ -59,7 +59,7 @@ fun MFASettingsScreen() { To force dark mode, you can wrap the component in `Auth0Theme(darkTheme = true)` or pass the dark color scheme explicitly: -```kotlin +```kotlin wrap lines // Option 1: Force dark mode via Auth0Theme @Composable fun MFASettingsScreen() { @@ -81,9 +81,9 @@ fun MFASettingsScreen() { ### Configure a full brand theme -You can configure for full brand alignment by combining colors, typography, and shapes for complete brand control using `Auth0ThemeConfiguration()` : +For full brand alignment, combine colors, typography, and shapes in a single `Auth0ThemeConfiguration`: -```kotlin +```kotlin wrap lines fun MFASettingsScreen() { AuthenticatorSettingsComponent( themeConfiguration = Auth0ThemeConfiguration( @@ -118,9 +118,9 @@ fun MFASettingsScreen() { ### Read theme tokens in your own composables -You can read theme tokens in an `Auth0Theme{ ... }` composable using the accessor object: +Read theme tokens inside an `Auth0Theme { ... }` composable using the accessor object: -```kotlin +```kotlin wrap lines @Composable fun CustomAuthCard() { Card( @@ -149,7 +149,7 @@ fun CustomAuthCard() { You can keep the theme configuration in state to swap between light and dark (or brand variants) without recreating the screen: -```kotlin +```kotlin wrap lines @Composable fun MFASettingsScreen() { var isDarkMode by remember { mutableStateOf(false) } @@ -171,107 +171,68 @@ fun MFASettingsScreen() { To customize colors use `Auth0Color.light()` and `Auth0Color.dark()` factories as starting points and `.copy(...)` to override specific tokens. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TokenUsage
`backgroundPrimary`, `backgroundPrimarySubtle`, `backgroundInverse`, `backgroundAccent`CTA and accent surfaces
`backgroundLayerTop`, `backgroundLayerMedium`, `backgroundLayerBase`Overlay / card / app-background layers
`backgroundError`, `backgroundErrorSubtle`, `backgroundSuccess`, `backgroundSuccessSubtle`Feedback surfaces
`borderBold`, `borderDefault`, `borderSubtle`, `borderShadow`Emphasis and elevation borders
`textBold`, `textDefault`, `textSubtle`Heading / body / caption text
`textOnPrimary`, `textOnInverse`, `textError`, `textSuccess`, `textAccent`Text on colored surfaces
+| **Token** | **Usage** | +|-----------|-----------| +| `backgroundPrimary`, `backgroundPrimarySubtle`, `backgroundInverse`, `backgroundAccent` | CTA and accent surfaces | +| `backgroundLayerTop`, `backgroundLayerMedium`, `backgroundLayerBase` | Overlay, card, and app-background layers | +| `backgroundError`, `backgroundErrorSubtle`, `backgroundSuccess`, `backgroundSuccessSubtle` | Feedback surfaces | +| `borderBold`, `borderDefault`, `borderSubtle`, `borderShadow` | Emphasis and elevation borders | +| `textBold`, `textDefault`, `textSubtle` | Heading, body, and caption text | +| `textOnPrimary`, `textOnInverse`, `textError`, `textSuccess`, `textAccent` | Text on colored surfaces |
To customize typography use the compose token `TextStyle`. You can override it with `Auth0Typography.default().copy(...)`. - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TokenUsage
`displayMedium`, `display`Hero / major screen headings
`titleLarge`, `title`Screen titles, in-content titles
`body`, `bodySmall`Descriptions, body copy, footnotes
`label`Button labels, form field labels
`helper`, `overline`Captions, helper text, category labels
+| **Token** | **Usage** | +|-----------|-----------| +| `displayMedium`, `display` | Hero and major screen headings | +| `titleLarge`, `title` | Screen titles, in-content titles | +| `body`, `bodySmall` | Descriptions, body copy, footnotes | +| `label` | Button labels, form field labels | +| `helper`, `overline` | Captions, helper text, category labels |
- - - - - - - - - - - - - - - - - - - -
TokenUsage
`none`No rounding
`extraSmall`, `small`, `medium`, `large`, `extraLarge`Standard rounding scale
`full`Fully rounded (pill)
+| **Token** | **Usage** | +|-----------|-----------| +| `none` | No rounding | +| `extraSmall`, `small`, `medium`, `large`, `extraLarge` | Standard rounding scale | +| `full` | Fully rounded (pill) |
-You can use `Auth0Theme.dimensions.*` to configure spacing values on a `4 dp` grid: `spacingXxs`, `spacingXs`, `spacingSm`, `spacingMd`, `spacingLg`, `spacingXl`, `spacingXxl`, `spacingXxxl`. +Spacing defaults to a `4 dp` grid. Access spacing tokens with `Auth0Theme.dimensions.*`. + +| **Token** | **Default** | **Description** | +|-----------|-------------|-----------------| +| `spacingXxs` | 4 dp | Minimal gap between tightly coupled elements | +| `spacingXs` | 8 dp | Small gap between grouped elements | +| `spacingSm` | 12 dp | Medium internal padding | +| `spacingMd` | 16 dp | Standard component and container padding | +| `spacingLg` | 24 dp | Larger padding for major sections | +| `spacingXl` | 32 dp | Extra-large padding | +| `spacingXxl` | 48 dp | Double-extra-large padding | +| `spacingXxxl` | 56 dp | Triple-extra-large padding | -You can use `Auth0Theme.sizes.*` to configure component dimensions: `buttonHeight`, `inputHeight`, icon sizes, OTP cell dimensions. +Access component dimensions with `Auth0Theme.sizes.*`. + +| **Token** | **Default** | **Usage** | +|-----------|-------------|-----------| +| `buttonHeight` | 48 dp | All primary and secondary action buttons | +| `inputHeight` | 60 dp | Text and phone-number input fields | +| `iconSmall` | 16 dp | Small icons—chevrons, info indicators, checkmarks | +| `iconMedium` | 24 dp | Standard icons—authentication-method images | +| `iconLarge` | 28 dp | Large icons—three-dots menu | +| `otpCellWidth` | 48 dp | Width of a single character-input cell | +| `otpCellHeight` | 56 dp | Height of a single character-input cell | ## Learn more diff --git a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx index 3aeebbe675..a2e16173a0 100644 --- a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx @@ -1,7 +1,7 @@ --- title: Auth Methods Management on Android description: Render a full-screen UI that lets users enroll, review, and remove MFA factors, passkeys, and recovery codes using the Auth0 My Account API on Android. -sidebarTitle: Auth Methods Management +sidebarTitle: AuthenticatorSettingsComponent --- import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" @@ -12,66 +12,39 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -The Auth Methods Management component renders a complete UI for managing a user's authentication methods. -It ships as `AuthenticatorSettingsComponent` on Android — a Jetpack Compose composable that handles every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). You do not need to orchestrate navigation, call endpoints, or manage state. +The Universal Components for Android SDK includes the `AuthenticatorSettingsComponent`, a Jetpack Compose composable that handles every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). + +It uses the My Account API's [authentication methods management](/docs/manage-users/my-account-api#manage-authentication-methods) capabilities to render a complete UI for managing a user's authentication methods. + +With the `AuthenticatorSettingsComponent`, you do not need to orchestrate navigation, call endpoints, or manage state. ## Setup requirements -Before rendering this component, follow [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK with a token provider. -The component reads its configuration, token provider, and passkey settings from the initialized SDK singleton. +* Before rendering `AuthenticatorSettingsComponent` component, follow [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK with a token provider. +* The `AuthenticatorSettingsComponent` component reads its configuration, token provider, and passkey settings from the initialized SDK singleton. ## Supported factors -The component handles every factor Auth0 supports through the My Account API. Each factor's screens inherit the component's active theme, read [Customize Style and Themes](/docs/get-started/universal-components/android/android-theming) for the full token catalog. +The component handles every factor Auth0 supports through the My Account API. Each factor's screens inherit the component's active theme. To learn more, read [Customize Style and Themes](/docs/get-started/universal-components/android/android-theming). Enable the factors you want on the Auth0 tenant; the component automatically shows and hides factors based on what the tenant exposes. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FactorWhat the component rendersSDK notes
Email OTPEmail input → 6-digit OTP verificationPlatform OTP autofill (Android keyboard autofill) works against the OTP field.
SMS OTPCountry-code picker + phone entry → 6-digit OTP verificationAndroid SMS Retriever API is not used; the SMS body has no app hash. Autofill via the system keyboard works normally.
TOTP (Authenticator app)QR code with manual-entry key → 6-digit OTP verificationRenders the standard otpauth:// payload; no custom brand logo injection into the QR.
Push notificationsQR code for Auth0 Guardian scan → "waiting for approval" stateEnd users need the public Auth0 Guardian app. Enterprise customers with a branded Guardian SDK build must surface their own install link outside the component.
PasskeysEducational screen → OS biometric prompt → enrolled entry in the listRequires Digital Asset Links (Android 14+). See the dedicated page for app-side platform setup.
Recovery codesDisplay-once code list with copy action + "I've saved my codes" confirmationCodes are displayed to the user and never returned to the caller. Copy-to-clipboard uses the platform's standard clipboard API.
- -### Getting started +| **Factor** | **What the component renders** | **SDK notes** | +|-----------|-------------------------------|--------------| +| [Email OTP](/docs/secure/multi-factor-authentication/configure-mfa-email) | Email input → 6-digit OTP verification | Platform OTP autofill (Android keyboard autofill) works against the OTP field. | +| [SMS OTP](/docs/secure/multi-factor-authentication/configure-sms-notifications-for-mfa) | Country-code picker and phone entry → 6-digit OTP verification | The Android [SMS Retriever API](https://developers.google.com/identity/sms-retriever/overview) is not used; the SMS body has no app hash. Autofill via the system keyboard works normally. | +| [TOTP (authenticator application)](/docs/secure/multi-factor-authentication/configure-otp) | QR code with manual-entry key → 6-digit OTP verification | Renders the standard `otpauth://` payload. No custom brand logo injection into the QR. | +| [Push notifications](/docs/secure/multi-factor-authentication/enable-push-notifications-for-mfa) | QR code for [Auth0 Guardian](/docs/secure/multi-factor-authentication/auth0-guardian) scan → "waiting for approval" state | End users need the public Auth0 Guardian application. Enterprise customers with a branded Guardian SDK build must surface their own install link outside the component. | +| [Passkeys](/docs/get-started/universal-components/android/components/factors/passkeys) | Educational screen → OS biometric prompt → enrolled entry in the list | Requires Digital Asset Links (Android 14+). See the dedicated page for app-side platform setup. | +| [Recovery codes](/docs/secure/multi-factor-authentication/configure-recovery-codes-for-mfa) | Display-once code list with a copy action and an "I've saved my codes" confirmation | Codes are displayed to the user and never returned to the caller. The copy-to-clipboard action uses the platform's standard clipboard API. | + +## Get started Use the `AuthenticatorSettingsComponent()` from any composable. The SDK handles all internal navigation between enrollment, verification, and management screens. -```kotlin LoginSecurityScreen.kt +```kotlin LoginSecurityScreen.kt wrap lines import androidx.compose.runtime.Composable import com.auth0.universalcomponents.presentation.ui.mfa.AuthenticatorSettingsComponent @@ -81,38 +54,20 @@ fun LoginSecurityScreen() { } ``` -### Parameters - - - - - - - - - - - - - - - - - - - - - - -
ParameterTypeDefaultPurpose
modifierModifierModifierStandard Compose modifier.
themeConfigurationAuth0ThemeConfigurationAuth0ThemeConfiguration.DefaultOverride design tokens — colors, typography, shapes, dimensions, sizes. See Customize Style and Themes.
- -### Customization +## Parameters + +| **Parameter** | **Type** | **Default** | **Purpose** | +|---------------|----------|-------------|-------------| +| `modifier` | `Modifier` | `Modifier` | Standard Compose modifier. | +| `themeConfiguration` | `Auth0ThemeConfiguration` | `Auth0ThemeConfiguration.Default` | Override design tokens—colors, typography, shapes, dimensions, sizes. To learn more, read [Customize Style and Themes](/docs/get-started/universal-components/android/android-theming). | + +## Customization Theming is applied to the component as a whole; individual factor screens inherit the active theme. Use a custom `Auth0ThemeConfiguration` to override design tokens across every screen the component renders. -```kotlin +```kotlin wrap lines AuthenticatorSettingsComponent( themeConfiguration = Auth0ThemeConfiguration( color = Auth0Color.light().copy( @@ -125,11 +80,11 @@ AuthenticatorSettingsComponent( For the full token catalog and dark-mode patterns, read [Customize Style and Themes](/docs/get-started/universal-components/android/android-theming). -### Advanced compose NavHost integration +## Advanced Compose NavHost integration -The `AuthenticatorSettingsComponent` participates in Compose's `NavHost` when present and does not need special wiring. Use it as any other composable, if it is a destination in your `NavHost`, back-navigation defers to the host's `NavController`. +The `AuthenticatorSettingsComponent` participates in Compose's `NavHost` when present and does not need special wiring. Use it like any other composable. When it is a destination in your `NavHost`, back-navigation defers to the host's `NavController`. -```kotlin +```kotlin wrap lines @Composable fun AccountNavGraph(navController: NavHostController) { NavHost(navController, startDestination = "settings") { @@ -139,13 +94,13 @@ fun AccountNavGraph(navController: NavHostController) { } ``` -Internally, the SDK manages its own nested navigation between enrollment, verification, and management screens. That internal graph is isolated from your application's `NavController`, so no naming collisions can occur. +Internally, the SDK manages its own nested navigation between enrollment, verification, and management screens. That internal graph is isolated from your application's `NavController`, so it does not collide with your application's routes. -### Localization +## Localization -All user facing strings live in the SDK's `values/strings.xml` file. You can override any string in your application by redefining the same key in your own `values/strings.xml` file: +All user-facing strings live in the SDK's `values/strings.xml` file. You can override any string in your application by redefining the same key in your own `values/strings.xml` file: -```text +```xml wrap lines Next @@ -156,9 +111,9 @@ To ship localized copies, you can provide translated `values-/strings.xm ## Limitations -* **No standalone factor components on Android**. Every factor renders inside the Auth Methods Management component. There is no public API to enroll, verify, or remove a single factor from a different part of your application. -* **No standalone list/remove components**. The SDK does not ship public components for listing enrolled factors or removing them outside the component. Use the Auth methods component for the full management experience. -* **Post-login passkey prompts are not supported**. Prompting a user to save a passkey immediately after sign-in (separate from the settings screen) is not covered by this SDK today. You can track [universal-components-android](https://github.com/auth0/universal-components-android/issues) for updates. +* **No standalone factor components on Android**. Every factor renders inside the Authentication Methods Management component. There is no public API to enroll, verify, or remove a single factor from a different part of your application. +* **No standalone list/remove components**. The SDK does not ship public components for listing enrolled factors or removing them outside the component. Use the Authentication Methods Management component for the full management experience. +* **Post-login passkey prompts are not supported**. Prompting a user to save a passkey immediately after sign-in (separate from the settings screen) is not covered by this SDK. You can track [universal-components-android](https://github.com/auth0/universal-components-android/issues) for updates. ## Learn more diff --git a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx index 6977f9b560..252cdf6fe7 100644 --- a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx @@ -1,6 +1,6 @@ --- title: Passkeys on Android -description: SDK-specific behavior, app-side entitlements, and customization for the Passkey factor rendered inside the Auth Methods Management component on Android. +description: SDK-specific behavior, application-side entitlements, and customization for the passkey factor rendered inside the Authentication Methods Management component on Android. sidebarTitle: Passkeys --- @@ -12,9 +12,11 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -The [Auth Methods Management](/docs/get-started/universal-components/android/components/auth-methods-management) component renders the [Passkey](/docs/authenticate/database-connections/passkeys) enrollment flow, an educational screen, a WebAuthn registration handshake with the platform authenticator, and the enrolled-factor entry in the authenticator list. +The [`AuthenticatorSettingsComponent`](/docs/get-started/universal-components/android/components/auth-methods-management) can render the Auth0 [passkey](/docs/authenticate/database-connections/passkeys) enrollment flow. -Unlike other factors, passkeys require application-side platform entitlements that the SDK cannot configure. This page covers the platform entitlements and SDK configuration specific to passkeys on Android. +The passkey enrollment flow renders an educational screen, a WebAuthn registration handshake with the platform authenticator, and the enrolled-factor entry in the authenticator list. + +Unlike other factors, passkeys require application-side platform entitlements that the Universal Components for Android SDK cannot configure. ## Prerequisites @@ -26,13 +28,13 @@ Unlike other factors, passkeys require application-side platform entitlements th Read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK. Set `PasskeyConfiguration` on the SDK initializer if your integration needs a specific connection or linked identity. -3. **Complete the platform level application setup** +3. **Complete the platform-level application setup** - Unlike other factors, passkeys requires your application to prove ownership of the Auth0 domain at the OS level. Follow the [Platform setup](#platform-setup) steps to configure. + Unlike other factors, passkeys require your application to prove ownership of the Auth0 domain at the OS level. Follow the [Platform setup](#platform-setup) steps to configure. ## Platform setup -Passkeys bind to the relying party domain Auth0 issues credentials for, typically your Auth0 tenant domain or [custom domain](/docs/customize/custom-domains). The platform verifies this binding through Android Digital Asset Links. +Passkeys bind to the relying-party domain that Auth0 issues credentials for — typically your Auth0 tenant domain or [custom domain](/docs/customize/custom-domains). The platform verifies this binding through Android Digital Asset Links. 1. **Confirm AndroidX Credentials is resolved** @@ -40,25 +42,25 @@ Passkeys bind to the relying party domain Auth0 issues credentials for, typicall 2. **Register your application package and SHA-256 signing fingerprints in the Auth0 Dashboard** - A. Navigate to **Auth0 Dashboard → Authentication → Database** - B. Select the **Database Connections** - C. Select the **Passkey settings** tab - D. Add your application package and SHA-256 signing fingerprints in the **Allowed Android Applications** + 1. Navigate to [**Auth0 Dashboard > Authentication > Database**](https://manage.auth0.com/#/connections/database). + 2. Select the database connection you want passkeys enabled on. + 3. Select the **Passkey settings** tab. + 4. Add your application package and SHA-256 signing fingerprints under **Allowed Android Applications**. - Auth0 serves `/.well-known/assetlinks.json` on your domain automatically and includes every registered app. + Auth0 serves `/.well-known/assetlinks.json` on your domain automatically and includes every registered application. Obtain fingerprints with: - ```bash + ```bash wrap lines keytool -list -v -keystore /path/to/keystore -alias YOUR_ALIAS | grep SHA256 ``` - For Play App Signing, copy the fingerprint from **Play Console → Setup → App signing**. + For Play App Signing, copy the fingerprint from **Play Console > Setup > App signing**. 3. **Minimum Android version** Platform-credential passkeys require **Android 14+ (API 34+)** for the full Credential Manager experience. On **Android 9–13 (API 28–33)**, passkeys sync through Google Password Manager on devices with up-to-date Play Services. - The component hides the Passkey option for **Android API 28** and below. + The component hides the passkey option for **Android API 28** and below. Google's [Credential Manager](https://developer.android.com/identity/sign-in/credential-manager) guide and the [Digital Asset Links tester](https://developers.google.com/digital-asset-links/tools/generator) are the authoritative references. Validate your `assetlinks.json` before testing on-device. @@ -67,55 +69,34 @@ Google's [Credential Manager](https://developer.android.com/identity/sign-in/cre ## Customization -The Passkey educational and status screens inherit the component's active theme. The biometric prompt itself is rendered by the OS and cannot be themed. - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TokenEffect on Passkey screens
`backgroundAccent`Accent color for the passkey educational illustration
`backgroundPrimary`Add Passkey button background
`textOnPrimary`Add Passkey button label
`textBold`Headline and explainer copy
`shapes.large`Button corner radius
- -For the full token, read [Customize Style and Themes](/docs/get-started/universal-components/android/android-theming). - -### SDK Limitations - -* **Passkeys can only be enrolled from inside the Auth Methods Management component**. There is no public Composable API to trigger a standalone passkey enrollment from elsewhere in your app. Post-login "save a passkey" upsell prompts are not supported today. You can track [universal-components-android](https://github.com/auth0/universal-components-android/issues) for updates. +The passkey educational and status screens inherit the component's active theme. The biometric prompt itself is rendered by the OS and cannot be themed. + +| **Token** | **Effect on passkey screens** | +|-----------|-------------------------------| +| `backgroundAccent` | Accent color for the passkey educational illustration | +| `backgroundPrimary` | **Add Passkey** button background | +| `textOnPrimary` | **Add Passkey** button label | +| `textBold` | Headline and explainer copy | +| `shapes.large` | Button corner radius | + +To learn more about the full token catalog, read [Customize Style and Themes](/docs/get-started/universal-components/android/android-theming). + +### SDK limitations + +* **Passkeys can only be enrolled from inside the `AuthenticatorSettingsComponent`**. There is no public Composable API to trigger a standalone passkey enrollment from elsewhere in your application. Post-login "save a passkey" upsell prompts are not supported. You can track [universal-components-android](https://github.com/auth0/universal-components-android/issues) for updates. * **Removing a passkey in the component does not purge the OS credential store**. The enrolled passkey detaches from the Auth0 account, but the private credential remains in Google Password Manager until the user removes it from the OS-level credential manager. -* **Android's PasskeyEnableScreen is informational only**. It is publicly callable, but it renders a static educational card, the `onEnableClick` callback is delegated to you. The actual enrollment logic lives inside the component's internal `PasskeyViewModel` and is not publicly exposed. +* **The `PasskeyEnableScreen` composable is informational only**. It is publicly callable, but it renders a static educational card; the `onEnableClick` callback is delegated to you. The actual enrollment logic lives inside the component's internal `PasskeyViewModel` and is not publicly exposed. -* **Attestation conveyance is not surfaced**. The SDK does not let the caller select attestation policy (`none` / `indirect` / `direct`) or enumerate authenticator transports — it uses the Auth0 tenant's configured WebAuthn policy. +* **Attestation conveyance is not surfaced**. The SDK does not let you select the attestation policy (`none` / `indirect` / `direct`) or enumerate authenticator transports. It uses the Auth0 tenant's configured [WebAuthn](/docs/secure/multi-factor-authentication/webauthn-as-mfa#webauthn-as-multi-factor-authentication) policy. ## Learn more - Auth Methods Management component reference and the full list of supported factors. + Review the `AuthenticatorSettingsComponent` reference and the full list of supported factors. diff --git a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx index ae60477e69..5a6bcc8f58 100644 --- a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx @@ -12,72 +12,72 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -Universal Components allows you to build a self-service account security UI within your native Android application. -This enables your users to manage their own authentication methods, such as MFA factors, passkeys, and recovery codes directly inside your application, without leaving for a web browser or contacting support. +Auth0 Universal Components for Android allow you to build a self-service account security UI within your native Android application. -## How it works -Universal Components leverage the [My Account API](/docs/manage-users/my-account-api), which operates using user scoped tokens, to render an authentication-methods management UI inside your application. +With the `AuthenticatorSettingsComponent`, users can manage their own authentication methods — multi-factor authentication (MFA) factors, passkeys, and recovery codes — directly inside your application, without leaving for a web browser or contacting support. -When an authenticated user opens their account settings screen, the [Auth0.Android](https://github.com/auth0/Auth0.Android) SDK retrieves an Access Token scoped to the My Account API audience. +## How it works -Universal Components use this token to call the API as the logged in user, ensuring each user can only modify their own authentication methods. +The `AuthenticatorSettingsComponent` uses the Auth0 My Account API's [authentication methods](/docs/manage-users/my-account-api#manage-authentication-methods) to render an authentication-methods management UI inside your application. - -My Account components are used to create **end-user self-service** interfaces. -For **delegated admin** UI where a user manages an Auth0 Organization, read [Build a Delegated Admin Interface](/docs/get-started/universal-components/web/components/build-delegated-admin). - +When an authenticated user opens their account settings screen, the [Auth0.Android](https://github.com/auth0/Auth0.Android) SDK retrieves an [access token](/docs/secure/tokens/access-tokens) scoped to the My Account API audience. -### Available components +The `AuthenticatorSettingsComponent` uses the access token to call the My Account API [`/me/v1/authentication-methods`](/docs/api/myaccount/authentication-methods/get-authentication-methods) endpoints as the logged-in user, so each user can only modify their own authentication methods. -Each component leverages the [My Account API](/docs/api/myaccount) and covers one or more authentication methods. + +* The `AuthenticatorSettingsComponent` creates **end-user self-service** interfaces. End users can enroll, list, and remove every authentication method on their account: email OTP, SMS OTP, TOTP (authenticator application), push via Auth0 Guardian, passkeys, and recovery codes. -| **Component** | **API endpoint** | -| :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :------------------------------ | -| **Auth Methods Management** — `AuthenticatorSettingsComponent`. Enrolls, lists, and removes every authentication method on the user's account: Email OTP, SMS OTP, TOTP (Authenticator app), Push via Auth0 Guardian, Passkeys, and Recovery Codes. | `/me/v1/authentication-methods` | +* For **delegated admin** interfaces where a user manages an Auth0 Organization, read [Build a Delegated Admin Interface](/docs/get-started/universal-components/web/components/build-delegated-admin). + -## Configure My Account Components using the Auth0 Dashboard +## Prerequisites -To use My Account components, you need to configure your Auth0 tenant with the proper [APIs](/docs/api/myaccount), [applications](/docs/get-started/applications), and [scopes](/docs/get-started/applications/application-access-to-apis-client-grants). +To use My Account components, configure your Auth0 tenant with the proper [APIs](/docs/api/myaccount), [applications](/docs/get-started/applications), and [scopes](/docs/get-started/applications/application-access-to-apis-client-grants). ### Enable the My Account API 1. Navigate to [Dashboard > Applications > APIs](https://manage.auth0.com/#/apis). -2. Select **Activate My Account API** to and ensure it is enabled for your tenant. +2. Select **Activate My Account API** to ensure it is enabled for your tenant. -### Create an Application and configure My Account API scopes +### Create an application and configure My Account API permissions 1. Navigate to [Dashboard > Applications](https://manage.auth0.com/#/applications). 2. Select **Create Application**. 3. Select **Native**. -4. In the **Settings** tab, add the callback URL in the **Allowed Callback URLs**: `https://YOUR_AUTH0_DOMAIN://YOUR_PACKAGE_NAME/android/YOUR_PACKAGE_NAME/callback`. +4. Select the **Settings** tab to add the callback URL in the **Allowed Callback URLs**: + + ```text wrap lines + https://YOUR_AUTH0_DOMAIN/android/YOUR_PACKAGE_NAME/callback + ``` + 5. Add your logout URLs in the **Allowed Logout URLs**. -6. Select the **API Access Tab**. -7. Select **Edit** for the **Auth0 My Account API** to select the User delegated Access permissions: +6. Select the **API Access** tab. +7. Select **Edit** for the **Auth0 My Account API** to add the **User-delegated Access** permissions. ### Configure scopes -Request the scopes your app needs from the My Account API when obtaining the user's access token. +When you request the user's access token, request the scopes your application needs from the My Account API. - ``` - create:me:authentication_methods - read:me:authentication_methods - update:me:authentication_methods - delete:me:authentication_methods - ``` +```text wrap lines +create:me:authentication_methods +read:me:authentication_methods +update:me:authentication_methods +delete:me:authentication_methods +``` -The user's token only includes permissions they were granted during login. Request all four scopes if you want users to enroll, review, and remove authentication methods. +The user's access token only includes permissions they were granted during login. Request all four scopes if you want users to enroll, review, and remove authentication methods. -### Configure passkeys (optional) +### Configure passkeys in your tenant (optional) You can skip this step if you are not enabling passkey enrollment. 1. Navigate to [Dashboard > Authentication > Database](https://manage.auth0.com/#/connections/database). Open the database connection you want passkeys enabled on. 2. Under **Passkey settings**, toggle **Require Passkey Enrollment** as needed for your policy. -3. Register your Android application package name and SHA-256 signing fingerprints under **Allowed Android Applications**. Obtain the fingerprint with `keytool -list -v -keystore /path/to/keystore -alias YOUR_ALIAS | grep SHA256`, or copy it from **Play Console > Setup > App signing** for **Play App Signing**. +3. Register your Android application package name and SHA-256 signing fingerprints under **Allowed Android Applications**. Get the fingerprint with `keytool -list -v -keystore /path/to/keystore -alias YOUR_ALIAS | grep SHA256`, or copy it from **Play Console > Setup > App signing** for **Play App Signing**. Auth0 publishes the platform association file (`assetlinks.json`) on your tenant domain automatically. @@ -93,100 +93,113 @@ Use Gradle to install `com.auth0.universalcomponents:universal-components`. For ### Initialize the SDK -To initialize the SDK use the `Auth0UniversalComponents.initialize(...)` method once at the application start, typically from your application subclass or from `onCreate` in the launcher `Activity`. - - ```kotlin MainActivity.kt theme={null} - import com.auth0.android.Auth0 - import com.auth0.android.authentication.AuthenticationAPIClient - import com.auth0.android.authentication.storage.CredentialsManager - import com.auth0.android.authentication.storage.SharedPreferencesStorage - import com.auth0.universalcomponents.Auth0UniversalComponents - import com.auth0.universalcomponents.token.DefaultTokenProvider - - class MainActivity : ComponentActivity() { - - private val account by lazy { - Auth0.getInstance( - getString(R.string.com_auth0_client_id), - getString(R.string.com_auth0_domain) - ) - } - - private val credentialsManager by lazy { - CredentialsManager( - AuthenticationAPIClient(account), - SharedPreferencesStorage(this) - ) - } - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - Auth0UniversalComponents.initialize( - context = context, - account = account, - tokenProvider = DefaultTokenProvider(credentialsManager), - scheme = getString(R.string.com_auth0_scheme) - ) - - setContent { MyApp() } - } +To initialize the SDK, call the `Auth0UniversalComponents.initialize(...)` method once at application start, typically from your `Application` subclass or from `onCreate` in the launcher `Activity`. + +```kotlin MainActivity.kt wrap lines +import com.auth0.android.Auth0 +import com.auth0.android.authentication.AuthenticationAPIClient +import com.auth0.android.authentication.storage.CredentialsManager +import com.auth0.android.authentication.storage.SharedPreferencesStorage +import com.auth0.universalcomponents.Auth0UniversalComponents +import com.auth0.universalcomponents.token.DefaultTokenProvider + +class MainActivity : ComponentActivity() { + + private val account by lazy { + Auth0.getInstance( + getString(R.string.com_auth0_client_id), + getString(R.string.com_auth0_domain) + ) + } + + private val credentialsManager by lazy { + CredentialsManager( + AuthenticationAPIClient(account), + SharedPreferencesStorage(this) + ) + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + Auth0UniversalComponents.initialize( + context = applicationContext, + account = account, + tokenProvider = DefaultTokenProvider(credentialsManager), + scheme = getString(R.string.com_auth0_scheme) + ) + + setContent { MyApp() } } +} ``` ### Configure the token provider -Use the `DefaultTokenProvider` which wraps the `Auth0.Android CredentialsManager`, unless you need custom token storage. +Use the `DefaultTokenProvider`, which wraps the Auth0.Android SDK's `CredentialsManager`, unless you need custom token storage. If you manage tokens outside the Auth0.Android `CredentialsManager`, implement the interface directly: - ```kotlin theme={null} - class AppTokenProvider : TokenProvider { - override suspend fun fetchCredentials(): Credentials { - // Return the user's login credentials. - } - override suspend fun fetchApiCredentials( - audience: String, - scope: String? - ): APICredentials { - // Return cached My Account API credentials, refreshing if expired. - } - override suspend fun saveApiCredentials( - audience: String, - credentials: APICredentials - ) { - // Persist the freshly issued API credentials. - } - } - ``` +```kotlin wrap lines +class AppTokenProvider : TokenProvider { + override suspend fun fetchCredentials(): Credentials { + // Return the user's login credentials. + } + override suspend fun fetchApiCredentials( + audience: String, + scope: String? + ): APICredentials { + // Return cached My Account API credentials, refreshing if expired. + } + override suspend fun saveApiCredentials( + audience: String, + credentials: APICredentials + ) { + // Persist the freshly issued API credentials. + } +} +``` -### Configure passkeys (optional) -Use the `PasskeyConfiguration` to customize how the SDK enrolls passkeys through the AndroidX Credential Manager. - - ```kotlin theme={null} - import androidx.credentials.CredentialManager - import com.auth0.universalcomponents.PasskeyConfiguration - - val passkeyConfiguration = PasskeyConfiguration( - credentialManager = CredentialManager.create(this), - connection = "Username-Password-Authentication", - userIdentity = "auth0|abc123" - ) - - Auth0UniversalComponents.initialize( - context = context, - account = account, - tokenProvider = DefaultTokenProvider(credentialsManager), - scheme = getString(R.string.com_auth0_scheme), - passkeyConfiguration = passkeyConfiguration - ) - ``` +### Configure passkeys in the SDK (optional) + +Configure passkeys with the `PasskeyConfiguration` class to customize how the SDK enrolls passkeys through the AndroidX Credential Manager. + +```kotlin wrap lines +import androidx.credentials.CredentialManager +import com.auth0.universalcomponents.PasskeyConfiguration + +val passkeyConfiguration = PasskeyConfiguration( + credentialManager = CredentialManager.create(this), + connection = "Username-Password-Authentication", + userIdentity = "auth0|abc123" +) + +Auth0UniversalComponents.initialize( + context = applicationContext, + account = account, + tokenProvider = DefaultTokenProvider(credentialsManager), + scheme = getString(R.string.com_auth0_scheme), + passkeyConfiguration = passkeyConfiguration +) +``` -Passkeys require Android 14+ for the full Credential Manager experience. On Android's versions 9–13, they sync through Google Password Manager on devices with up-to-date Play Services. +Passkeys require Android 14+ for the full Credential Manager experience. On Android versions 9–13, they sync through Google Password Manager on devices with up-to-date Play Services. - Users must be authenticated before you render any component. Once the SDK is initialized and your `TokenProvider` is wired up, drop the [Auth Methods Management](/docs/get-started/universal-components/android/components/auth-methods-management) component into your settings screen to give users full MFA, passkey, and recovery-code self-service. + Users must be authenticated before you render any component. After the SDK is initialized and your `TokenProvider` is wired up, add the [`AuthenticatorSettingsComponent`](/docs/get-started/universal-components/android/components/auth-methods-management) to your settings screen to give users full MFA, passkey, and recovery-code self-service. + +## Learn more + + + + Review the `AuthenticatorSettingsComponent` reference, supported factors, and Compose NavHost integration. + + + + Override colors, typography, spacing, radius, and size tokens using the Auth0 design-token system. + + diff --git a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx index 4db3c7197c..83e8e686a0 100644 --- a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx @@ -151,7 +151,7 @@ struct AppTokenProvider: TokenProvider { - Component reference, supported factors, and embedded-navigation examples. + Review the `MyAccountAuthMethodsView` component reference, supported factors, and embedded-navigation examples. From 9a101d26e54de682c394225ba95dcdf3649dc5d5 Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 2 Jun 2026 18:45:39 +0200 Subject: [PATCH 24/50] Update --- .../android/android-overview.mdx | 35 ++++----- .../android/android-theming.mdx | 16 ++--- .../components/auth-methods-management.mdx | 8 +-- .../android/components/factors/passkeys.mdx | 42 +++-------- .../components/my-account-overview.mdx | 72 ++++--------------- .../ios/components/factors/passkeys.mdx | 2 +- .../ios/components/my-account-overview.mdx | 7 +- .../universal-components/ios/ios-theming.mdx | 2 +- 8 files changed, 56 insertions(+), 128 deletions(-) diff --git a/main/docs/get-started/universal-components/android/android-overview.mdx b/main/docs/get-started/universal-components/android/android-overview.mdx index 5a2809be69..5b5a13c22c 100644 --- a/main/docs/get-started/universal-components/android/android-overview.mdx +++ b/main/docs/get-started/universal-components/android/android-overview.mdx @@ -12,26 +12,30 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> +The Auth0 [Universal Components for Android](https://github.com/auth0/ui-components-android) SDK provides pre-built, embeddable UI for Auth0 identity flows using [Jetpack Compose](https://developer.android.com/compose). -Auth0 Universal Components for Android ship pre-built, embeddable UI for identity flows in [native applications](/docs/get-started/auth0-overview/create-applications/native-apps#register-native-applications) using [Jetpack Compose](https://developer.android.com/compose). +Universal Components for Android are built on top of the [Auth0 Android SDK](https://github.com/auth0/Auth0.Android) and integrate with [My Account APIs](/docs/manage-users/my-account-api). ## Prerequisites -To use Auth0 Universal Components for Android: +To configure the Universal Components for Android SDK, you need: + +* Operating systems: **Android 11+** (API 30). +* Programming Language: **Kotlin 2.2+**, **Android Gradle Plugin 8.11+**, **Jetpack Compose BOM 2024.09.00+**, **JDK 17+**. -* The base SDK supports **Android 11+** (API 30); passkeys specifically require **Android 14+**. -* **Kotlin 2.2+**, **Android Gradle Plugin 8.11+**, **Jetpack Compose BOM 2024.09.00+**, **JDK 17+**. -Auth0 [passkey](/docs/authenticate/database-connections/passkeys) support requires **Android 14+**. +To enable Auth0 [passkey](/docs/authenticate/database-connections/passkeys) support, you need **Android 14+**. ## Install the SDK -The Android SDK is distributed through the [Maven Central](https://mvnrepository.com/artifact/com.auth0) repository as `com.auth0.universalcomponents:universal-components`. +The Universal Component for Android SDK is distributed as the `com.auth0.universalcomponents:universal-components` through the [Maven Central](https://mvnrepository.com/artifact/com.auth0) repository. ### Gradle +Use Gradle to install the SDK: + 1. Add the `mavenCentral()` repository if it is not listed in your `settings.gradle` or `settings.gradle.kts` file: ```kotlin wrap lines @@ -51,17 +55,6 @@ The Android SDK is distributed through the [Maven Central](https://mvnrepository } ``` -### Minimum supported versions - -| **Requirement** | **Version** | -|-----------------|-------------| -| **Android minSdk** | 30 (Android 11) | -| **Kotlin** | 2.2+ | -| **Android Gradle Plugin** | 8.11+ | -| **Jetpack Compose BOM** | 2024.09.00+ | -| **Auth0 Android SDK** | 3.14.0 (resolved transitively) | -| **JDK** | 17+ | - Auth0 recommends using [Auth0.Android v3+](https://github.com/auth0/Auth0.Android) in your application. Older versions may cause compilation errors when resolved alongside Universal Components. @@ -81,19 +74,17 @@ android { ### Verify the installation -Confirm the dependency resolves by running: +To verify the Universal Components for Android SDK installation, confirm the dependency resolves by running: ```bash wrap lines ./gradlew app:dependencies | grep universal-components ``` -After the SDK is installed, continue to [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview) to wire authentication and render the authentication-methods management UI. - ## Sample application -Review the sample application in the Auth0 [ui-components-android](https://github.com/auth0/ui-components-android#documentation) GitHub repository. +You can review the sample application of the [Universal Component for Android](https://github.com/auth0/ui-components-android#run-the-sample-app) SDK on GitHub. -The sample application includes `MainActivity.kt` for Auth0 SDK setup and initialization and `LoginSecurityScreen.kt` for rendering the `AuthenticatorSettingsComponent`. +The sample application includes `MainActivity.kt` and the `LoginSecurityScreen.kt` files for SDK initialization and rendering of the `AuthenticatorSettingsComponent`. ## Next steps diff --git a/main/docs/get-started/universal-components/android/android-theming.mdx b/main/docs/get-started/universal-components/android/android-theming.mdx index f17f5133d0..2757ea027a 100644 --- a/main/docs/get-started/universal-components/android/android-theming.mdx +++ b/main/docs/get-started/universal-components/android/android-theming.mdx @@ -12,15 +12,13 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" terms="true" /> -Auth0 Universal Components for Android use a design token model. - -Visual properties such as colors, typography, spacing, corner radii, and component sizes are each expressed as a named token. Override a single value without changes to your layouts. +Auth0 [Universal Components for Android](https://github.com/auth0/ui-components-android) use a design token model. Visual properties such as colors, typography, spacing, corner radii, and component sizes are each expressed as a token that you can override without changes to your layouts. Universal Components ship with a default Auth0 theme. You can provide your own theme to match your brand. ## How theming works -The [Android SDK](https://github.com/auth0/ui-components-android) uses a Jetpack Compose theme that mirrors Material 3's `MaterialTheme` pattern. +Universal Component for Android uses a Jetpack Compose theme that mirrors Material 3's `MaterialTheme` pattern. You can wrap SDK content using `Auth0Theme { ... }` to provide tokens, or pass `themeConfiguration` directly to `AuthenticatorSettingsComponent`. @@ -28,7 +26,7 @@ You can read tokens inside any composable using `Auth0Theme.colors`, `Auth0Theme ### Zero configuration -If you do not configure a theme, the Android SDK renders the default Auth0 theme: +If you do not configure a theme, Universal Components for Android render the Auth0 default theme. The following example displays the `AuthenticatorSettingsComponent` without any customization: ```kotlin wrap lines @Composable @@ -39,7 +37,9 @@ fun MFASettingsScreen() { ### Override a subset of tokens -Override individual tokens with `Auth0Color.light().copy(...)`, `Auth0Color.dark()`, or `Auth0Typography.default().copy(...)`. +You can override specific tokens while Universal Components for Android render every other token using the Auth0 default theme. + +The following example overrides the tokens `Auth0Color.light().copy(...)`, `Auth0Color.dark()`, or `Auth0Typography.default().copy(...)`: ```kotlin wrap lines @Composable @@ -81,7 +81,7 @@ fun MFASettingsScreen() { ### Configure a full brand theme -For full brand alignment, combine colors, typography, and shapes in a single `Auth0ThemeConfiguration`: +Provide your own branding theme that combines colors, typography, and shapes into a single `Auth0ThemeConfiguration` configuration: ```kotlin wrap lines fun MFASettingsScreen() { @@ -118,7 +118,7 @@ fun MFASettingsScreen() { ### Read theme tokens in your own composables -Read theme tokens inside an `Auth0Theme { ... }` composable using the accessor object: +Access theme tokens inside an `Auth0Theme { ... }` composable using the accessor object: ```kotlin wrap lines @Composable diff --git a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx index a2e16173a0..166c95742f 100644 --- a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx @@ -27,9 +27,7 @@ With the `AuthenticatorSettingsComponent`, you do not need to orchestrate naviga ## Supported factors -The component handles every factor Auth0 supports through the My Account API. Each factor's screens inherit the component's active theme. To learn more, read [Customize Style and Themes](/docs/get-started/universal-components/android/android-theming). - -Enable the factors you want on the Auth0 tenant; the component automatically shows and hides factors based on what the tenant exposes. +The component handles every factor Auth0 supports with the My Account API. Each factor's screens inherit the component's active theme. To learn more, read [Customize Style and Themes](/docs/get-started/universal-components/android/android-theming). | **Factor** | **What the component renders** | **SDK notes** | |-----------|-------------------------------|--------------| @@ -42,7 +40,7 @@ Enable the factors you want on the Auth0 tenant; the component automatically sho ## Get started -Use the `AuthenticatorSettingsComponent()` from any composable. The SDK handles all internal navigation between enrollment, verification, and management screens. +Add the `AuthenticatorSettingsComponent()` from any composable. The SDK handles all internal navigation between enrollment, verification, and management screens. ```kotlin LoginSecurityScreen.kt wrap lines import androidx.compose.runtime.Composable @@ -56,6 +54,8 @@ fun LoginSecurityScreen() { ## Parameters +The `AuthenticatorSettingsComponent()` component accepts the following modifier: + | **Parameter** | **Type** | **Default** | **Purpose** | |---------------|----------|-------------|-------------| | `modifier` | `Modifier` | `Modifier` | Standard Compose modifier. | diff --git a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx index 252cdf6fe7..11eebe0872 100644 --- a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx @@ -20,47 +20,25 @@ Unlike other factors, passkeys require application-side platform entitlements th ## Prerequisites -1. **Enable passkeys on your Auth0 database connection** +To enable passkey support in the Universal Component for Android SDK: - Read [Passkeys](/docs/authenticate/database-connections/passkeys) to enable it in your Auth0 tenant. -2. **Complete the Universal Components setup** +* **Enable passkeys on your Auth0 database connection**. To learn how to enable passkeys in your Auth0 tenant, read [Passkeys](/docs/authenticate/database-connections/passkeys) to enable it in your Auth0 tenant. - Read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK. Set `PasskeyConfiguration` on the SDK initializer if your integration needs a specific connection or linked identity. +* **Install and configure Universal Components for Android**. To install Universal Components, configure your Auth0 tenant, and initialize the SDK, read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK. Set `PasskeyConfiguration` on the SDK initializer if your integration needs a specific connection or linked identity. -3. **Complete the platform-level application setup** +* **Confirm Android version**. Passkeys require Android **14+** (API 34+) for the full Credential Manager experience. On Android **9–13** (API 28–33), passkeys sync through Google Password Manager on devices with up-to-date Play Services. The component hides the passkey option for Android API 28 and below. - Unlike other factors, passkeys require your application to prove ownership of the Auth0 domain at the OS level. Follow the [Platform setup](#platform-setup) steps to configure. +* **Register your Android application package and SHA-256 signing fingerprints**. To learn more, read [Enable Android App Links Support](/docs/get-started/applications/enable-android-app-links-support) ## Platform setup -Passkeys bind to the relying-party domain that Auth0 issues credentials for — typically your Auth0 tenant domain or [custom domain](/docs/customize/custom-domains). The platform verifies this binding through Android Digital Asset Links. +Passkeys bind credentials to your Auth0 tenant's [custom domain](/docs/customize/custom-domains). The platform verifies this binding through Android Digital Asset Links. -1. **Confirm AndroidX Credentials is resolved** +**Confirm AndroidX Credentials is resolved** - The Universal Components SDK depends on `androidx.credentials:credentials:1.5.0+` transitively. If you see credential manager errors, verify with `./gradlew app:dependencies`. + The Universal Component for Android SDK depends on `androidx.credentials:credentials:1.5.0+` transitively. If you see credential manager errors, verify with `./gradlew app:dependencies`. -2. **Register your application package and SHA-256 signing fingerprints in the Auth0 Dashboard** - - 1. Navigate to [**Auth0 Dashboard > Authentication > Database**](https://manage.auth0.com/#/connections/database). - 2. Select the database connection you want passkeys enabled on. - 3. Select the **Passkey settings** tab. - 4. Add your application package and SHA-256 signing fingerprints under **Allowed Android Applications**. - - Auth0 serves `/.well-known/assetlinks.json` on your domain automatically and includes every registered application. - - Obtain fingerprints with: - - ```bash wrap lines - keytool -list -v -keystore /path/to/keystore -alias YOUR_ALIAS | grep SHA256 - ``` - For Play App Signing, copy the fingerprint from **Play Console > Setup > App signing**. - -3. **Minimum Android version** - - Platform-credential passkeys require **Android 14+ (API 34+)** for the full Credential Manager experience. - On **Android 9–13 (API 28–33)**, passkeys sync through Google Password Manager on devices with up-to-date Play Services. - The component hides the passkey option for **Android API 28** and below. Google's [Credential Manager](https://developer.android.com/identity/sign-in/credential-manager) guide and the [Digital Asset Links tester](https://developers.google.com/digital-asset-links/tools/generator) are the authoritative references. Validate your `assetlinks.json` before testing on-device. @@ -69,7 +47,9 @@ Google's [Credential Manager](https://developer.android.com/identity/sign-in/cre ## Customization -The passkey educational and status screens inherit the component's active theme. The biometric prompt itself is rendered by the OS and cannot be themed. +The passkey educational and status screens inherit the `AuthenticatorSettingsComponent` component's active theme. + +The biometric prompt itself is rendered by the OS and cannot be themed. | **Token** | **Effect on passkey screens** | |-----------|-------------------------------| diff --git a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx index 5a6bcc8f58..f1de67cafd 100644 --- a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx @@ -32,8 +32,6 @@ The `AuthenticatorSettingsComponent` uses the access token to call the My Accoun ## Prerequisites -To use My Account components, configure your Auth0 tenant with the proper [APIs](/docs/api/myaccount), [applications](/docs/get-started/applications), and [scopes](/docs/get-started/applications/application-access-to-apis-client-grants). - ### Enable the My Account API 1. Navigate to [Dashboard > Applications > APIs](https://manage.auth0.com/#/apis). @@ -52,44 +50,28 @@ To use My Account components, configure your Auth0 tenant with the proper [APIs] 5. Add your logout URLs in the **Allowed Logout URLs**. 6. Select the **API Access** tab. -7. Select **Edit** for the **Auth0 My Account API** to add the **User-delegated Access** permissions. - -### Configure scopes - -When you request the user's access token, request the scopes your application needs from the My Account API. - - -```text wrap lines -create:me:authentication_methods -read:me:authentication_methods -update:me:authentication_methods -delete:me:authentication_methods -``` - - - -The user's access token only includes permissions they were granted during login. Request all four scopes if you want users to enroll, review, and remove authentication methods. - - -### Configure passkeys in your tenant (optional) - -You can skip this step if you are not enabling passkey enrollment. +7. Select **Edit** for the **Auth0 My Account API** to add the **User-delegated Access** permissions: -1. Navigate to [Dashboard > Authentication > Database](https://manage.auth0.com/#/connections/database). Open the database connection you want passkeys enabled on. -2. Under **Passkey settings**, toggle **Require Passkey Enrollment** as needed for your policy. -3. Register your Android application package name and SHA-256 signing fingerprints under **Allowed Android Applications**. Get the fingerprint with `keytool -list -v -keystore /path/to/keystore -alias YOUR_ALIAS | grep SHA256`, or copy it from **Play Console > Setup > App signing** for **Play App Signing**. + Request only the permissions your application needs from the My Account API. -Auth0 publishes the platform association file (`assetlinks.json`) on your tenant domain automatically. + + ```text wrap lines + create:me:authentication_methods + read:me:authentication_methods + update:me:authentication_methods + delete:me:authentication_methods + ``` + +8. Select **Save** to save the permissions. -Passkeys require custom domains to be enabled in your tenant. +* The user's access token only includes permissions they were granted during login. +* Request all four scopes if you want users to enroll, review, and remove authentication methods. -## Configure your application - ### Install the SDK -Use Gradle to install `com.auth0.universalcomponents:universal-components`. For installation details and platform requirements, read [Auth0 Universal Components for Android](/docs/get-started/universal-components/android/android-overview). +Use Gradle to install the `com.auth0.universalcomponents:universal-components` package. For installation details and platform requirements, read Auth0 [Universal Components for Android](/docs/get-started/universal-components/android/android-overview). ### Initialize the SDK @@ -162,32 +144,6 @@ class AppTokenProvider : TokenProvider { ```
-### Configure passkeys in the SDK (optional) - -Configure passkeys with the `PasskeyConfiguration` class to customize how the SDK enrolls passkeys through the AndroidX Credential Manager. - -```kotlin wrap lines -import androidx.credentials.CredentialManager -import com.auth0.universalcomponents.PasskeyConfiguration - -val passkeyConfiguration = PasskeyConfiguration( - credentialManager = CredentialManager.create(this), - connection = "Username-Password-Authentication", - userIdentity = "auth0|abc123" -) - -Auth0UniversalComponents.initialize( - context = applicationContext, - account = account, - tokenProvider = DefaultTokenProvider(credentialsManager), - scheme = getString(R.string.com_auth0_scheme), - passkeyConfiguration = passkeyConfiguration -) -``` - -Passkeys require Android 14+ for the full Credential Manager experience. On Android versions 9–13, they sync through Google Password Manager on devices with up-to-date Play Services. - - Users must be authenticated before you render any component. After the SDK is initialized and your `TokenProvider` is wired up, add the [`AuthenticatorSettingsComponent`](/docs/get-started/universal-components/android/components/auth-methods-management) to your settings screen to give users full MFA, passkey, and recovery-code self-service. diff --git a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx index a3027c4508..39bbf5bf27 100644 --- a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx @@ -16,7 +16,7 @@ The [`MyAccountAuthMethodsView`](/docs/get-started/universal-components/ios/comp The passkey enrollment flow renders an educational screen, a WebAuthn registration handshake with the platform authenticator, and the enrolled-factor entry in the authenticator list. -Unlike other factors, Auth0 [passkeys](/docs/authenticate/database-connections/passkeys) require application-side platform entitlements that the Universal Components for iOS SDK cannot configure. +Unlike other factors, passkeys require application-side platform entitlements that the Universal Components for iOS SDK cannot configure. ## Prerequisites diff --git a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx index 83e8e686a0..36ef062e98 100644 --- a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx @@ -22,7 +22,7 @@ The `MyAccountAuthMethodsView` component uses Auth0 My Account API's [authentica When an authenticated user opens their account settings screen, the [Auth0.swift](https://github.com/auth0/Auth0.swift) SDK retrieves an [access token](/docs/secure/tokens/access-tokens) scoped to the My Account API audience. -`MyAccountAuthMethodsView` uses the access token to call the My Account API [`/me/v1/authentication-methods`](/docs/api/myaccount/authentication-methods/get-authentication-methods) endpoints as the logged-in user, so each user can only modify their own authentication methods. +The `MyAccountAuthMethodsView` component uses the access token to call the My Account API [`/me/v1/authentication-methods`](/docs/api/myaccount/authentication-methods/get-authentication-methods) endpoints as the logged-in user, so each user can only modify their own authentication methods. * The `MyAccountAuthMethodsView` component creates **end-user self-service** interfaces. End users can enroll, list, and remove every authentication method on their account: email OTP, SMS OTP, TOTP (authenticator application), push via Auth0 Guardian, passkeys, and recovery codes. @@ -46,7 +46,7 @@ When an authenticated user opens their account settings screen, the [Auth0.swift 4. Select the **Settings** tab to add the callback URL in the **Allowed Callback URLs**: ```text wrap lines - https://YOUR_AUTH0_DOMAIN/YOUR_BUNDLE_ID/ios/callback + https://YOUR_AUTH0_DOMAIN/ios/YOUR_BUNDLE_ID/callback ``` 5. Add your logout URLs in the **Allowed Logout URLs**. @@ -74,7 +74,8 @@ When an authenticated user opens their account settings screen, the [Auth0.swift ### Install the SDK -Use the Swift Package Manager or Carthage to install Auth0UniversalComponents. +Use the Swift Package Manager or Carthage to install the `Auth0UniversalComponents` package. + To learn more about installation details and requirements, read [Auth0 Universal Components for iOS](/docs/get-started/universal-components/ios/ios-overview). ### Initialize the SDK diff --git a/main/docs/get-started/universal-components/ios/ios-theming.mdx b/main/docs/get-started/universal-components/ios/ios-theming.mdx index 2b5345b924..62c414b826 100644 --- a/main/docs/get-started/universal-components/ios/ios-theming.mdx +++ b/main/docs/get-started/universal-components/ios/ios-theming.mdx @@ -22,7 +22,7 @@ Universal Components for iOS use a SwiftUI `@Environment` property wrapper theme ### Zero configuration -If you do not configure a theme, Universal Components for iOS render the Auth0 default theme. The following example displays the account methods view without any customization: +If you do not configure a theme, Universal Components for iOS render the Auth0 default theme. The following example displays the `MyAccountAuthMethodsView` component without any customization: ```swift wrap lines import SwiftUI From d8327f39da29458b35f89474ecec236b724ef5e3 Mon Sep 17 00:00:00 2001 From: Carlos Fung Date: Wed, 3 Jun 2026 08:46:37 +0200 Subject: [PATCH 25/50] Update main/docs/get-started/universal-components/android/components/factors/passkeys.mdx Co-authored-by: Amanda VS --- .../universal-components/android/components/factors/passkeys.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx index 11eebe0872..3ae74f2fac 100644 --- a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx @@ -10,6 +10,7 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" feature="Auth0 Universal Components" stage="beta" terms="true" + contact="Auth0 Support" /> The [`AuthenticatorSettingsComponent`](/docs/get-started/universal-components/android/components/auth-methods-management) can render the Auth0 [passkey](/docs/authenticate/database-connections/passkeys) enrollment flow. From 1c6089cdc1f596c3b67a4bc387c83567ac078b09 Mon Sep 17 00:00:00 2001 From: Carlos Fung Date: Wed, 3 Jun 2026 08:46:51 +0200 Subject: [PATCH 26/50] Update main/docs/get-started/universal-components/android/components/auth-methods-management.mdx Co-authored-by: Amanda VS --- .../android/components/auth-methods-management.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx index 166c95742f..f0500fee58 100644 --- a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx @@ -10,6 +10,7 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" feature="Auth0 Universal Components" stage="beta" terms="true" + contact="Auth0 Support" /> The Universal Components for Android SDK includes the `AuthenticatorSettingsComponent`, a Jetpack Compose composable that handles every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). From 44aca27792347e8326d758d30a11ac149d7d8df7 Mon Sep 17 00:00:00 2001 From: Carlos Fung Date: Wed, 3 Jun 2026 08:47:05 +0200 Subject: [PATCH 27/50] Update main/docs/get-started/universal-components/android/android-overview.mdx Co-authored-by: Amanda VS --- .../universal-components/android/android-overview.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/main/docs/get-started/universal-components/android/android-overview.mdx b/main/docs/get-started/universal-components/android/android-overview.mdx index 5b5a13c22c..a22bedd5c8 100644 --- a/main/docs/get-started/universal-components/android/android-overview.mdx +++ b/main/docs/get-started/universal-components/android/android-overview.mdx @@ -10,6 +10,7 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" feature="Auth0 Universal Components" stage="beta" terms="true" + contact="Auth0 Support" /> The Auth0 [Universal Components for Android](https://github.com/auth0/ui-components-android) SDK provides pre-built, embeddable UI for Auth0 identity flows using [Jetpack Compose](https://developer.android.com/compose). From f34eaab7bc2d78a82c51aec3fb2bee42ea4cc2f7 Mon Sep 17 00:00:00 2001 From: Carlos Fung Date: Wed, 3 Jun 2026 08:47:18 +0200 Subject: [PATCH 28/50] Update main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx Co-authored-by: Amanda VS --- .../universal-components/ios/components/factors/passkeys.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx index 39bbf5bf27..a24bf65df7 100644 --- a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx @@ -10,6 +10,7 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" feature="Auth0 Universal Components" stage="beta" terms="true" + contact="Auth0 Support" /> The [`MyAccountAuthMethodsView`](/docs/get-started/universal-components/ios/components/auth-methods-management) component can render the Auth0 [passkey](/docs/authenticate/database-connections/passkeys) enrollment flow. From f3ecc372f16f90c1dd2e39c7514a7423068474f8 Mon Sep 17 00:00:00 2001 From: Carlos Fung Date: Wed, 3 Jun 2026 08:47:35 +0200 Subject: [PATCH 29/50] Update main/docs/get-started/universal-components/android/components/auth-methods-management.mdx Co-authored-by: Amanda VS --- .../android/components/auth-methods-management.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx index f0500fee58..4df744948d 100644 --- a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx @@ -62,7 +62,7 @@ The `AuthenticatorSettingsComponent()` component accepts the following modifier: | `modifier` | `Modifier` | `Modifier` | Standard Compose modifier. | | `themeConfiguration` | `Auth0ThemeConfiguration` | `Auth0ThemeConfiguration.Default` | Override design tokens—colors, typography, shapes, dimensions, sizes. To learn more, read [Customize Style and Themes](/docs/get-started/universal-components/android/android-theming). | -## Customization +## Customize Theming is applied to the component as a whole; individual factor screens inherit the active theme. From 6b68b38584043dc7dfa51331a67e39a698228616 Mon Sep 17 00:00:00 2001 From: Carlos Fung Date: Wed, 3 Jun 2026 08:47:47 +0200 Subject: [PATCH 30/50] Update main/docs/get-started/universal-components/android/components/my-account-overview.mdx Co-authored-by: Amanda VS --- .../android/components/my-account-overview.mdx | 1 + 1 file changed, 1 insertion(+) diff --git a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx index f1de67cafd..562fa151ff 100644 --- a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx @@ -10,6 +10,7 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" feature="Auth0 Universal Components" stage="beta" terms="true" + contact="Auth0 Support" /> Auth0 Universal Components for Android allow you to build a self-service account security UI within your native Android application. From b1f78e6ea1dec6bdbe79c7ac0a63fa452987177a Mon Sep 17 00:00:00 2001 From: Carlos Fung Date: Wed, 3 Jun 2026 08:48:04 +0200 Subject: [PATCH 31/50] Update main/docs/get-started/universal-components/android/components/factors/passkeys.mdx Co-authored-by: Amanda VS --- .../android/components/factors/passkeys.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx index 3ae74f2fac..3b8f14c90b 100644 --- a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx @@ -1,6 +1,6 @@ --- title: Passkeys on Android -description: SDK-specific behavior, application-side entitlements, and customization for the passkey factor rendered inside the Authentication Methods Management component on Android. +description: Learn about the SDK-specific behavior, application-side entitlements, and customization for the passkey factor rendered inside the Authentication Methods Management component on Android. sidebarTitle: Passkeys --- From de83175558221042b535b9d5c8b2b5969e8b3973 Mon Sep 17 00:00:00 2001 From: Carlos Fung Date: Wed, 3 Jun 2026 08:48:29 +0200 Subject: [PATCH 32/50] Update main/docs/get-started/universal-components/android/components/my-account-overview.mdx Co-authored-by: Amanda VS --- .../android/components/my-account-overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx index 562fa151ff..ea07bb72c2 100644 --- a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx @@ -28,7 +28,7 @@ The `AuthenticatorSettingsComponent` uses the access token to call the My Accoun * The `AuthenticatorSettingsComponent` creates **end-user self-service** interfaces. End users can enroll, list, and remove every authentication method on their account: email OTP, SMS OTP, TOTP (authenticator application), push via Auth0 Guardian, passkeys, and recovery codes. -* For **delegated admin** interfaces where a user manages an Auth0 Organization, read [Build a Delegated Admin Interface](/docs/get-started/universal-components/web/components/build-delegated-admin). +* For **delegated admin** interfaces in which a user manages an Auth0 Organization, read [Build a Delegated Admin Interface](/docs/get-started/universal-components/web/components/build-delegated-admin). ## Prerequisites From 0c0213ffc8354b3cbcd50a2cc68a99ae413296e4 Mon Sep 17 00:00:00 2001 From: Carlos Fung Date: Wed, 3 Jun 2026 08:49:01 +0200 Subject: [PATCH 33/50] Update main/docs/get-started/universal-components/android/components/factors/passkeys.mdx Co-authored-by: Amanda VS --- .../android/components/factors/passkeys.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx index 3b8f14c90b..f619d570ac 100644 --- a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx @@ -26,7 +26,7 @@ To enable passkey support in the Universal Component for Android SDK: * **Enable passkeys on your Auth0 database connection**. To learn how to enable passkeys in your Auth0 tenant, read [Passkeys](/docs/authenticate/database-connections/passkeys) to enable it in your Auth0 tenant. -* **Install and configure Universal Components for Android**. To install Universal Components, configure your Auth0 tenant, and initialize the SDK, read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK. Set `PasskeyConfiguration` on the SDK initializer if your integration needs a specific connection or linked identity. +* **Install and configure Universal Components for Android**. To install Universal Components, configure your Auth0 tenant, and initialize the SDK, read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview). Set `PasskeyConfiguration` on the SDK initializer if your integration needs a specific connection or linked identity. * **Confirm Android version**. Passkeys require Android **14+** (API 34+) for the full Credential Manager experience. On Android **9–13** (API 28–33), passkeys sync through Google Password Manager on devices with up-to-date Play Services. The component hides the passkey option for Android API 28 and below. From 46481c2a3634b73adcc24944860460e446429015 Mon Sep 17 00:00:00 2001 From: Carlos Date: Wed, 3 Jun 2026 09:23:22 +0200 Subject: [PATCH 34/50] Update to address suggestions --- .../universal-components/android/android-theming.mdx | 1 + .../android/components/auth-methods-management.mdx | 5 +++-- .../android/components/my-account-overview.mdx | 7 ++----- .../ios/components/auth-methods-management.mdx | 8 +++++--- .../ios/components/factors/passkeys.mdx | 2 +- .../ios/components/my-account-overview.mdx | 11 ++++------- .../universal-components/ios/ios-overview.mdx | 1 + .../universal-components/ios/ios-theming.mdx | 1 + 8 files changed, 18 insertions(+), 18 deletions(-) diff --git a/main/docs/get-started/universal-components/android/android-theming.mdx b/main/docs/get-started/universal-components/android/android-theming.mdx index 2757ea027a..8a70226fe3 100644 --- a/main/docs/get-started/universal-components/android/android-theming.mdx +++ b/main/docs/get-started/universal-components/android/android-theming.mdx @@ -10,6 +10,7 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" feature="Auth0 Universal Components" stage="beta" terms="true" + contact="Auth0 Support" /> Auth0 [Universal Components for Android](https://github.com/auth0/ui-components-android) use a design token model. Visual properties such as colors, typography, spacing, corner radii, and component sizes are each expressed as a token that you can override without changes to your layouts. diff --git a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx index 4df744948d..1b150f2090 100644 --- a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx @@ -21,9 +21,10 @@ With the `AuthenticatorSettingsComponent`, you do not need to orchestrate naviga ## Setup requirements +Before rendering `AuthenticatorSettingsComponent` component, follow [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK with a token provider. + -* Before rendering `AuthenticatorSettingsComponent` component, follow [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK with a token provider. -* The `AuthenticatorSettingsComponent` component reads its configuration, token provider, and passkey settings from the initialized SDK singleton. +The `AuthenticatorSettingsComponent` component reads its configuration, token provider, and passkey settings from the initialized SDK singleton. ## Supported factors diff --git a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx index ea07bb72c2..7d863a4ed4 100644 --- a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx @@ -53,16 +53,13 @@ The `AuthenticatorSettingsComponent` uses the access token to call the My Accoun 6. Select the **API Access** tab. 7. Select **Edit** for the **Auth0 My Account API** to add the **User-delegated Access** permissions: - Request only the permissions your application needs from the My Account API. - - - ```text wrap lines + ```text create:me:authentication_methods read:me:authentication_methods update:me:authentication_methods delete:me:authentication_methods ``` - + 8. Select **Save** to save the permissions. diff --git a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx index 133bd43c56..b788f092f6 100644 --- a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx @@ -10,6 +10,7 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" feature="Auth0 Universal Components" stage="beta" terms="true" + contact="Auth0 Support" /> The Universal Components for iOS SDK includes the `MyAccountAuthMethodsView` component, a SwiftUI view that handles every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). @@ -20,9 +21,10 @@ With the `MyAccountAuthMethodsView` component, you do not need to orchestrate na ## Setup requirements +Before rendering the `MyAccountAuthMethodsView` component, follow [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK with a token provider. + -* Before rendering the `MyAccountAuthMethodsView` component, follow [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK with a token provider. -* The `MyAccountAuthMethodsView` component reads its configuration, token provider, and passkey settings from the initialized SDK. +The `MyAccountAuthMethodsView` component reads its configuration, token provider, and passkey settings from the initialized SDK. ## Supported factors @@ -72,7 +74,7 @@ The `MyAccountAuthMethodsView` component accepts the following modifier and envi | `.embeddedInNavigationStack()` | — | Mark the view as embedded in a host `NavigationStack` so the SDK pushes onto your stack instead of creating its own. | | `\.hostNavigationPath` | `Binding` | Environment binding the SDK uses to push destinations onto the host navigation stack. Required when you call `.embeddedInNavigationStack()`. | -## Customization +## Customize Theming is applied to the component as a whole; individual factor screens inherit the active theme. diff --git a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx index a24bf65df7..24d04dd23a 100644 --- a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx @@ -1,6 +1,6 @@ --- title: Passkeys on iOS -description: SDK-specific behavior, application-side entitlements, and customization for the passkey factor rendered inside the Authentication Methods Management component on iOS. +description: Learn about the SDK-specific behavior, application-side entitlements, and customization for the passkey factor rendered inside the Authentication Methods Management component on iOS. sidebarTitle: Passkeys --- diff --git a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx index 36ef062e98..e6cbbb2827 100644 --- a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx @@ -10,6 +10,7 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" feature="Auth0 Universal Components" stage="beta" terms="true" + contact="Auth0 Support" /> Auth0 Universal Components for iOS allow you to build a self-service account security UI within your [native iOS application](/docs/get-started/auth0-overview/create-applications#create-application-in-auth0). @@ -27,7 +28,7 @@ The `MyAccountAuthMethodsView` component uses the access token to call the My Ac * The `MyAccountAuthMethodsView` component creates **end-user self-service** interfaces. End users can enroll, list, and remove every authentication method on their account: email OTP, SMS OTP, TOTP (authenticator application), push via Auth0 Guardian, passkeys, and recovery codes. -* For **delegated admin** interfaces where a user manages an Auth0 Organization, read [Build a Delegated Admin Interface](/docs/get-started/universal-components/web/components/build-delegated-admin). +* For **delegated admin** interfaces in which a user manages an Auth0 Organization, read [Build a Delegated Admin Interface](/docs/get-started/universal-components/web/components/build-delegated-admin). @@ -45,7 +46,7 @@ The `MyAccountAuthMethodsView` component uses the access token to call the My Ac 3. Select **Native**. 4. Select the **Settings** tab to add the callback URL in the **Allowed Callback URLs**: - ```text wrap lines + ```text https://YOUR_AUTH0_DOMAIN/ios/YOUR_BUNDLE_ID/callback ``` @@ -53,16 +54,12 @@ The `MyAccountAuthMethodsView` component uses the access token to call the My Ac 6. Select the **API Access** tab. 7. Select **Edit** for the **Auth0 My Account API** to add the **User-delegated Access** permissions: - Request only the permissions your application needs from the My Account API. - - - ```text wrap lines + ```text create:me:authentication_methods read:me:authentication_methods update:me:authentication_methods delete:me:authentication_methods ``` - 8. Select **Save** to save the permissions. diff --git a/main/docs/get-started/universal-components/ios/ios-overview.mdx b/main/docs/get-started/universal-components/ios/ios-overview.mdx index 385a612ca7..a1045978ab 100644 --- a/main/docs/get-started/universal-components/ios/ios-overview.mdx +++ b/main/docs/get-started/universal-components/ios/ios-overview.mdx @@ -10,6 +10,7 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" feature="Auth0 Universal Components" stage="beta" terms="true" + contact="Auth0 Support" /> diff --git a/main/docs/get-started/universal-components/ios/ios-theming.mdx b/main/docs/get-started/universal-components/ios/ios-theming.mdx index 62c414b826..1fdef12f71 100644 --- a/main/docs/get-started/universal-components/ios/ios-theming.mdx +++ b/main/docs/get-started/universal-components/ios/ios-theming.mdx @@ -10,6 +10,7 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" feature="Auth0 Universal Components" stage="beta" terms="true" + contact="Auth0 Support" /> Auth0 [Universal Components for iOS](https://github.com/auth0/ui-components-ios) use a design token model. Visual properties such as colors, typography, spacing, corner radii, and component sizes are each expressed as a token that you can override without changes to your layouts. From c14a2f5a2c6b3662604e0474742fac3d26ea07fe Mon Sep 17 00:00:00 2001 From: Carlos Date: Wed, 3 Jun 2026 09:43:20 +0200 Subject: [PATCH 35/50] Update --- .../android/components/my-account-overview.mdx | 16 ++++++++++------ .../ios/components/my-account-overview.mdx | 8 +++----- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx index 7d863a4ed4..e3f737bd43 100644 --- a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx @@ -13,7 +13,7 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" contact="Auth0 Support" /> -Auth0 Universal Components for Android allow you to build a self-service account security UI within your native Android application. +Auth0 Universal Components for Android allow you to build a self-service account security UI within your [native Android application](/docs/get-started/auth0-overview/create-applications#create-application-in-auth0). With the `AuthenticatorSettingsComponent`, users can manage their own authentication methods — multi-factor authentication (MFA) factors, passkeys, and recovery codes — directly inside your application, without leaving for a web browser or contacting support. @@ -59,7 +59,7 @@ The `AuthenticatorSettingsComponent` uses the access token to call the My Accoun update:me:authentication_methods delete:me:authentication_methods ``` - + 8. Select **Save** to save the permissions. @@ -116,10 +116,14 @@ class MainActivity : ComponentActivity() { ### Configure the token provider -Use the `DefaultTokenProvider`, which wraps the Auth0.Android SDK's `CredentialsManager`, unless you need custom token storage. +Use the `DefaultTokenProvider`, which wraps the [`Auth0.Android`](https://github.com/auth0/Auth0.Android) `CredentialsManager`, to request credentials from your application. + + +Auth0 recommends using the Auth0.Android's `CredentialsManager` for production integrations. Implement a custom `TokenProvider` only if the `Auth0.Android` SDK does not meet your storage requirements. + + - -If you manage tokens outside the Auth0.Android `CredentialsManager`, implement the interface directly: +To manage credentials outside the Auth0.Android SDK's `CredentialsManager`, implement the interface directly: ```kotlin wrap lines class AppTokenProvider : TokenProvider { @@ -140,7 +144,7 @@ class AppTokenProvider : TokenProvider { } } ``` - + Users must be authenticated before you render any component. After the SDK is initialized and your `TokenProvider` is wired up, add the [`AuthenticatorSettingsComponent`](/docs/get-started/universal-components/android/components/auth-methods-management) to your settings screen to give users full MFA, passkey, and recovery-code self-service. diff --git a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx index e6cbbb2827..14f96a9825 100644 --- a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx @@ -113,14 +113,13 @@ Auth0UniversalComponentsSDKInitializer.initialize( ### Configure the token provider -The `TokenProvider` protocol is the interface the SDK uses to request credentials from your application. +Use the `TokenProvider`, which wraps the `Auth0.swift`](https://github.com/auth0/Auth0.swift) `CredentialsManager`, to request credentials from your application. -Auth0 recommends using the [`Auth0.swift`](https://github.com/auth0/Auth0.swift) `CredentialsManager` for production integrations. Implement a custom `TokenProvider` only if the `Auth0.swift` SDK does not meet your storage requirements. +Auth0 recommends using the Auth0.swift's `CredentialsManager` for production integrations. Implement a custom `TokenProvider` only if the `Auth0.swift` SDK does not meet your storage requirements. - -If you manage credentials yourself, implement all four methods: +To manage credentials outside the Auth0.iOS SDK's `CredentialsManager`, implement the interface directly: ```swift wrap lines struct AppTokenProvider: TokenProvider { @@ -138,7 +137,6 @@ struct AppTokenProvider: TokenProvider { } } ``` - From ec9b8b10c9378ba1a79709dcc1069183f492a3b1 Mon Sep 17 00:00:00 2001 From: Carlos Date: Wed, 3 Jun 2026 09:50:43 +0200 Subject: [PATCH 36/50] Update --- .../android/components/my-account-overview.mdx | 8 ++++---- .../ios/components/my-account-overview.mdx | 10 +++++----- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx index e3f737bd43..04a25c28d7 100644 --- a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx @@ -54,10 +54,10 @@ The `AuthenticatorSettingsComponent` uses the access token to call the My Accoun 7. Select **Edit** for the **Auth0 My Account API** to add the **User-delegated Access** permissions: ```text - create:me:authentication_methods - read:me:authentication_methods - update:me:authentication_methods - delete:me:authentication_methods + `create:me:authentication_methods` + `read:me:authentication_methods` + `update:me:authentication_methods` + `delete:me:authentication_methods` ``` 8. Select **Save** to save the permissions. diff --git a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx index 14f96a9825..4c592dfe39 100644 --- a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx @@ -55,10 +55,10 @@ The `MyAccountAuthMethodsView` component uses the access token to call the My Ac 7. Select **Edit** for the **Auth0 My Account API** to add the **User-delegated Access** permissions: ```text - create:me:authentication_methods - read:me:authentication_methods - update:me:authentication_methods - delete:me:authentication_methods + `create:me:authentication_methods` + `read:me:authentication_methods` + `update:me:authentication_methods` + `delete:me:authentication_methods` ``` 8. Select **Save** to save the permissions. @@ -113,7 +113,7 @@ Auth0UniversalComponentsSDKInitializer.initialize( ### Configure the token provider -Use the `TokenProvider`, which wraps the `Auth0.swift`](https://github.com/auth0/Auth0.swift) `CredentialsManager`, to request credentials from your application. +Use the `TokenProvider`, which wraps the [`Auth0.swift`](https://github.com/auth0/Auth0.swift) `CredentialsManager`, to request credentials from your application. Auth0 recommends using the Auth0.swift's `CredentialsManager` for production integrations. Implement a custom `TokenProvider` only if the `Auth0.swift` SDK does not meet your storage requirements. From 8051b85176100232cba498411769efe310ce57b1 Mon Sep 17 00:00:00 2001 From: Carlos Date: Wed, 3 Jun 2026 09:51:33 +0200 Subject: [PATCH 37/50] Update --- .../android/components/my-account-overview.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx index 04a25c28d7..f41ecc7f17 100644 --- a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx @@ -45,7 +45,7 @@ The `AuthenticatorSettingsComponent` uses the access token to call the My Accoun 3. Select **Native**. 4. Select the **Settings** tab to add the callback URL in the **Allowed Callback URLs**: - ```text wrap lines + ```text https://YOUR_AUTH0_DOMAIN/android/YOUR_PACKAGE_NAME/callback ``` From 69bc6f7cb1252be96d5bb9083d82183658971893 Mon Sep 17 00:00:00 2001 From: Carlos Date: Wed, 3 Jun 2026 09:58:22 +0200 Subject: [PATCH 38/50] Update --- .../android/components/my-account-overview.mdx | 2 -- .../universal-components/ios/components/my-account-overview.mdx | 2 -- 2 files changed, 4 deletions(-) diff --git a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx index f41ecc7f17..adf2f88e51 100644 --- a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx @@ -53,12 +53,10 @@ The `AuthenticatorSettingsComponent` uses the access token to call the My Accoun 6. Select the **API Access** tab. 7. Select **Edit** for the **Auth0 My Account API** to add the **User-delegated Access** permissions: - ```text `create:me:authentication_methods` `read:me:authentication_methods` `update:me:authentication_methods` `delete:me:authentication_methods` - ``` 8. Select **Save** to save the permissions. diff --git a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx index 4c592dfe39..1cba60e633 100644 --- a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx @@ -54,12 +54,10 @@ The `MyAccountAuthMethodsView` component uses the access token to call the My Ac 6. Select the **API Access** tab. 7. Select **Edit** for the **Auth0 My Account API** to add the **User-delegated Access** permissions: - ```text `create:me:authentication_methods` `read:me:authentication_methods` `update:me:authentication_methods` `delete:me:authentication_methods` - ``` 8. Select **Save** to save the permissions. From 939847b21faf3e71e06d1963d2b969bcbe9436a4 Mon Sep 17 00:00:00 2001 From: Suraj Thotakura Date: Thu, 4 Jun 2026 16:10:41 +0530 Subject: [PATCH 39/50] fix: corrections in iOS docs --- .../components/my-account-overview.mdx | 4 +- .../components/auth-methods-management.mdx | 48 +++++------------- .../ios/components/factors/passkeys.mdx | 20 +------- .../ios/components/my-account-overview.mdx | 14 +++--- .../universal-components/ios/ios-overview.mdx | 12 ++--- .../universal-components/ios/ios-theming.mdx | 50 ++++++++++++------- 6 files changed, 60 insertions(+), 88 deletions(-) diff --git a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx index adf2f88e51..05a5277e47 100644 --- a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx @@ -43,10 +43,10 @@ The `AuthenticatorSettingsComponent` uses the access token to call the My Accoun 1. Navigate to [Dashboard > Applications](https://manage.auth0.com/#/applications). 2. Select **Create Application**. 3. Select **Native**. -4. Select the **Settings** tab to add the callback URL in the **Allowed Callback URLs**: +4. Select the **Settings** tab to add the following callback URLs in the **Allowed Callback URLs**: ```text - https://YOUR_AUTH0_DOMAIN/android/YOUR_PACKAGE_NAME/callback + https://YOUR_AUTH0_DOMAIN/android/YOUR_PACKAGE_NAME/callback, https://YOUR_AUTH0_DOMAIN/ios/YOUR_PACKAGE_NAME/callback, YOUR_PACKAGE_NAME://YOUR_AUTH0_DOMAIN/ios/YOUR_PACKAGE_NAME/callback ``` 5. Add your logout URLs in the **Allowed Logout URLs**. diff --git a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx index b788f092f6..0ec1ca49d6 100644 --- a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx @@ -44,7 +44,7 @@ The component handles every authentication method factor configured with the My Add the `MyAccountAuthMethodsView` component anywhere in your SwiftUI hierarchy, typically behind a settings navigation link. -```swift SettingsView.swift wrap lines +```swift SettingsView.swift import SwiftUI import Auth0UniversalComponents @@ -76,21 +76,7 @@ The `MyAccountAuthMethodsView` component accepts the following modifier and envi ## Customize -Theming is applied to the component as a whole; individual factor screens inherit the active theme. - -Use a custom `Auth0Theme` modifier to override design tokens across every screen the component renders: - -```swift wrap lines -MyAccountAuthMethodsView() - .auth0Theme( - Auth0Theme( - colors: DefaultAuth0ColorTokens( - background: DefaultAuth0BackgroundColorTokens(primary: Color("BrandBlue")), - text: DefaultAuth0TextColorTokens(onPrimary: .white) - ) - ) - ) -``` +Theming is applied to the component as a whole; individual factor screens inherit the active theme. To learn more about the full token catalog and dark-mode patterns, read [Customize Style and Themes](/docs/get-started/universal-components/ios/ios-theming). @@ -102,26 +88,16 @@ By default, the `MyAccountAuthMethodsView` component manages its own `Navigation If your application already owns a navigation stack, nesting a second stack breaks back-button behavior and swipe-to-go-back gestures. Embed the `MyAccountAuthMethodsView` component into your stack instead. -```swift wrap lines -import SwiftUI -import Auth0UniversalComponents - -struct AccountScreen: View { - @State private var path = NavigationPath() - - var body: some View { - NavigationStack(path: $path) { - List { - NavigationLink("Authentication methods", value: "auth-methods") - } - .navigationDestination(for: String.self) { value in - if value == "auth-methods" { - MyAccountAuthMethodsView() - .embeddedInNavigationStack() - } - } +```swift +NavigationStack(path: $path) { + List { + NavigationLink("Authentication methods", value: "auth-methods") + } + .navigationDestination(for: String.self) { value in + if value == "auth-methods" { + MyAccountAuthMethodsView() + .embeddedInNavigationStack() } - .environment(\.hostNavigationPath, $path) } } ``` @@ -142,7 +118,7 @@ It is not required to drive the SDK's internal navigation. Only use it if you wa Universal Components for iOS do not ship localized strings. User-facing copy is in English. -If localization is a blocker for your integration, submit a feature request in the [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) repository. +If localization is a blocker for your integration, please submit a feature request in the [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) repository. ## Limitations diff --git a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx index 24d04dd23a..027e1b2fd9 100644 --- a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx @@ -44,27 +44,11 @@ Passkeys bind credentials to your Auth0 tenant's [custom domain](/docs/customize 3. Add a **Capability** and select **Associated Domains**. 4. Enter your Auth0 custom domain: - ```text wrap lines + ```text webcredentials:YOUR_AUTH0_DOMAIN ``` -## Customization - -The passkey educational and status screens inherit the `MyAccountAuthMethodsView` component's active theme. - -The biometric prompt itself is rendered by the OS and cannot be themed. - -| **Token** | **Effect on passkey screens** | -|-----------|-------------------------------| -| `background.accent` | Accent color for the passkey educational illustration | -| `background.primary` | **Add Passkey** button background | -| `text.onPrimary` | **Add Passkey** button label | -| `text.bold` | Headline and explainer copy | -| `radius.button` | Button corner radius | - -To learn more about the full token catalog, read [Customize Style and Themes](/docs/get-started/universal-components/ios/ios-theming). - -### SDK limitations +## SDK limitations * **Passkeys can only be enrolled from inside the `MyAccountAuthMethodsView` component**. There is no public SwiftUI API to trigger a standalone passkey enrollment from elsewhere in your application. Post-login "save a passkey" upsell prompts are not supported. You can track [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) for updates. diff --git a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx index 1cba60e633..cc1ffe0396 100644 --- a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx @@ -15,7 +15,7 @@ import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" Auth0 Universal Components for iOS allow you to build a self-service account security UI within your [native iOS application](/docs/get-started/auth0-overview/create-applications#create-application-in-auth0). -With the `MyAccountAuthMethodsView` component, users can manage their own authentication methods — multi-factor authentication (MFA) factors, passkeys, and recovery codes — directly inside your application, without leaving for a web browser or contacting support. +With the `MyAccountAuthMethodsView` component, users can manage their own authentication methods — multi-factor authentication (MFA) factors, passkeys, and recovery codes — directly inside your native application, without leaving for a web browser or contacting support. ## How it works @@ -44,13 +44,13 @@ The `MyAccountAuthMethodsView` component uses the access token to call the My Ac 1. Navigate to [Dashboard > Applications](https://manage.auth0.com/#/applications). 2. Select **Create Application**. 3. Select **Native**. -4. Select the **Settings** tab to add the callback URL in the **Allowed Callback URLs**: +4. Select the **Settings** tab to add the following callback URLs in the **Allowed Callback URLs**: ```text - https://YOUR_AUTH0_DOMAIN/ios/YOUR_BUNDLE_ID/callback + https://YOUR_AUTH0_DOMAIN/ios/YOUR_BUNDLE_ID/callback, YOUR_BUNDLE_ID://YOUR_AUTH0_DOMAIN/ios/YOUR_BUNDLE_ID/callback ``` -5. Add your logout URLs in the **Allowed Logout URLs**. +5. Repeat the same for your **Allowed Logout URLs**. 6. Select the **API Access** tab. 7. Select **Edit** for the **Auth0 My Account API** to add the **User-delegated Access** permissions: @@ -79,7 +79,7 @@ To initialize the SDK, call the `Auth0UniversalComponentsSDKInitializer.initiali If your application already uses `Auth0.plist` to configure Auth0.swift, add `ClientId`, `Domain`, and `Audience` keys and call: -```swift App.swift wrap lines +```swift App.swift import SwiftUI import Auth0 import Auth0UniversalComponents @@ -100,7 +100,7 @@ struct MyApp: App { Or pass the values directly in code: -```swift App.swift wrap lines +```swift App.swift Auth0UniversalComponentsSDKInitializer.initialize( domain: "YOUR_AUTH0_DOMAIN", clientId: "YOUR_CLIENT_ID", @@ -119,7 +119,7 @@ Auth0 recommends using the Auth0.swift's `CredentialsManager` for production int To manage credentials outside the Auth0.iOS SDK's `CredentialsManager`, implement the interface directly: -```swift wrap lines +```swift struct AppTokenProvider: TokenProvider { func fetchCredentials() async throws -> Credentials { // Return the user's login credentials. diff --git a/main/docs/get-started/universal-components/ios/ios-overview.mdx b/main/docs/get-started/universal-components/ios/ios-overview.mdx index a1045978ab..d9cecae3c5 100644 --- a/main/docs/get-started/universal-components/ios/ios-overview.mdx +++ b/main/docs/get-started/universal-components/ios/ios-overview.mdx @@ -22,8 +22,8 @@ Universal Components for iOS are built on top of the [Auth0 Swift SDK](https://g To configure the Universal Components for iOS SDK, you need: -* Operating systems: `iOS 16.0+`, `macOS 13.0+`, `visionOS 1.0+` -* Programming language: `Swift 5+` (6 preferred), `Xcode 16+` +* Operating systems: `iOS 16.0+` +* Programming language: `Swift 5+` (6 preferred), `Xcode 16+` (Preferred 26+) To enable Auth0 [passkey](/docs/authenticate/database-connections/passkeys) support, you need: **iOS 16.6+**, **macOS 13.5+**, or **visionOS 1.0+**. @@ -60,15 +60,15 @@ If you use the [Carthage](https://github.com/Carthage/Carthage) dependency manag 2. Run the following command: - ```bash wrap lines - carthage update --use-xcframeworks + ```bash + carthage bootstrap --platform iOS --use-xcframeworks ``` ### Verify the SDK installation To verify the Universal Components for iOS SDK installation, import the `Auth0UniversalComponents` module in a Swift file to confirm that the framework resolves: -```swift wrap lines +```swift import Auth0UniversalComponents ``` @@ -76,7 +76,7 @@ import Auth0UniversalComponents You can review the Universal Components for iOS sample application [`AppUIComponents`](https://github.com/auth0/ui-components-ios/tree/main/AppUIComponents) on GitHub. -The sample application includes the `AppUIComponentsApp.swift` and the `Common/ThemeManager.swift` files for SDK initialization and runtime theme switching. +Inside the sample application, `AppUIComponentsApp.swift` serves as the main SwiftUI entry point for SDK initialization, while `ThemeManager.swift` handles custom theme injection and runtime switching. ## Next steps diff --git a/main/docs/get-started/universal-components/ios/ios-theming.mdx b/main/docs/get-started/universal-components/ios/ios-theming.mdx index 1fdef12f71..27b7acf345 100644 --- a/main/docs/get-started/universal-components/ios/ios-theming.mdx +++ b/main/docs/get-started/universal-components/ios/ios-theming.mdx @@ -25,7 +25,7 @@ Universal Components for iOS use a SwiftUI `@Environment` property wrapper theme If you do not configure a theme, Universal Components for iOS render the Auth0 default theme. The following example displays the `MyAccountAuthMethodsView` component without any customization: -```swift wrap lines +```swift import SwiftUI import Auth0UniversalComponents @@ -36,13 +36,17 @@ struct ContentView: View { } ``` + +No additional setup is required to load the Auth0 default theme. Universal Components apply it automatically when no custom theme is provided. + + ### Override a subset of tokens You can override specific tokens while Universal Components for iOS render every other token using the Auth0 default theme. The following example overrides only the primary background and text colors: -```swift wrap lines +```swift import SwiftUI import Auth0UniversalComponents @@ -65,11 +69,19 @@ The same applies to typography, spacing, radius, and size tokens. The following example overrides typography and button radius: -```swift wrap lines +```swift Auth0Theme( typography: DefaultAuth0TypographyTokens( - body: Auth0TextStyle(font: .custom("Lato-Regular", size: 17), tracking: 0, lineSpacing: 7), - label: Auth0TextStyle(font: .custom("Lato-Medium", size: 16), tracking: 0.1, lineSpacing: 5) + body: Auth0TextStyle( + font: .custom("Lato-Regular", size: 17), + tracking: 0, + lineSpacing: 7 + ), + label: Auth0TextStyle( + font: .custom("Lato-Medium", size: 16), + tracking: 0.1, + lineSpacing: 5 + ) ), radius: DefaultAuth0RadiusTokens(button: 24) ) @@ -79,25 +91,25 @@ Auth0Theme( Provide your own branding theme that implements the three color category properties, then wire them into an `Auth0ColorTokens` container: -```swift wrap lines +```swift struct BrandBackground: Auth0BackgroundColorTokens { - var primary: Color { Color("Background/Primary", bundle: .main) } - var primarySubtle: Color { Color("Background/Primary", bundle: .main).opacity(0.35) } - var inverse: Color { Color("Background/Inverse", bundle: .main) } - var accent: Color { Color("Background/Accent", bundle: .main) } - var layerTop: Color { Color("Background/LayerTop", bundle: .main) } - var layerMedium: Color { Color("Background/LayerMedium", bundle: .main) } - var layerBase: Color { Color("Background/LayerBase", bundle: .main) } - var error: Color { Color("Background/Error", bundle: .main) } - var errorSubtle: Color { Color("Background/ErrorSubtle", bundle: .main).opacity(0.35) } - var success: Color { Color("Background/Success", bundle: .main) } + var primary: Color { Color("Background/Primary", bundle: .main) } + var primarySubtle: Color { Color("Background/Primary", bundle: .main).opacity(0.35) } + var inverse: Color { Color("Background/Inverse", bundle: .main) } + var accent: Color { Color("Background/Accent", bundle: .main) } + var layerTop: Color { Color("Background/LayerTop", bundle: .main) } + var layerMedium: Color { Color("Background/LayerMedium", bundle: .main) } + var layerBase: Color { Color("Background/LayerBase", bundle: .main) } + var error: Color { Color("Background/Error", bundle: .main) } + var errorSubtle: Color { Color("Background/ErrorSubtle", bundle: .main).opacity(0.35) } + var success: Color { Color("Background/Success", bundle: .main) } var successSubtle: Color { Color("Background/SuccessSubtle", bundle: .main) } } struct BrandColors: Auth0ColorTokens { var background: any Auth0BackgroundColorTokens { BrandBackground() } - var text: any Auth0TextColorTokens { DefaultAuth0TextColorTokens() } - var border: any Auth0BorderColorTokens { DefaultAuth0BorderColorTokens() } + var text: any Auth0TextColorTokens { DefaultAuth0TextColorTokens() } + var border: any Auth0BorderColorTokens { DefaultAuth0BorderColorTokens() } } MyAccountAuthMethodsView() @@ -108,7 +120,7 @@ MyAccountAuthMethodsView() Access the `@Environment(\.auth0Theme)` property wrapper to apply the same tokens in any Swift view: -```swift wrap lines +```swift struct MyCustomStep: View { @Environment(\.auth0Theme) private var theme From 64a6543c97a3b5756e5cc21615f96b05e70ba815 Mon Sep 17 00:00:00 2001 From: Suraj Thotakura Date: Thu, 4 Jun 2026 16:32:57 +0530 Subject: [PATCH 40/50] fix: corrections in Android docs - Remove `wrap lines` from all code blocks to fix broken line rendering - Remove redundant Customization section from passkeys page (duplicates theming page) - Remove redundant theming code block from auth-methods-management page - Promote SDK limitations to H2 heading in passkeys page - Fix callback URLs: replace incorrect /ios/ paths with /android/ - Update logout URL step to match iOS wording - Fix redundant phrasing in passkeys prerequisites - Add missing period in passkeys prerequisites - Add zero-config callout to theming page (matching iOS) - Add missing @Composable annotation in full brand theme example - Fix singular "Universal Component" to plural Universal Components --- .../android/android-overview.mdx | 10 +++---- .../android/android-theming.mdx | 19 +++++++++----- .../components/auth-methods-management.mdx | 21 +++------------ .../android/components/factors/passkeys.mdx | 26 ++++--------------- .../components/my-account-overview.mdx | 8 +++--- 5 files changed, 30 insertions(+), 54 deletions(-) diff --git a/main/docs/get-started/universal-components/android/android-overview.mdx b/main/docs/get-started/universal-components/android/android-overview.mdx index a22bedd5c8..b8a6e18597 100644 --- a/main/docs/get-started/universal-components/android/android-overview.mdx +++ b/main/docs/get-started/universal-components/android/android-overview.mdx @@ -31,7 +31,7 @@ To enable Auth0 [passkey](/docs/authenticate/database-connections/passkeys) supp ## Install the SDK -The Universal Component for Android SDK is distributed as the `com.auth0.universalcomponents:universal-components` through the [Maven Central](https://mvnrepository.com/artifact/com.auth0) repository. +The Universal Components for Android SDK is distributed as the `com.auth0.universalcomponents:universal-components` package through the [Maven Central](https://mvnrepository.com/artifact/com.auth0) repository. ### Gradle @@ -39,7 +39,7 @@ Use Gradle to install the SDK: 1. Add the `mavenCentral()` repository if it is not listed in your `settings.gradle` or `settings.gradle.kts` file: - ```kotlin wrap lines + ```kotlin dependencyResolutionManagement { repositories { mavenCentral() @@ -50,7 +50,7 @@ Use Gradle to install the SDK: 2. Add the dependency to your module-level `build.gradle` or `build.gradle.kts`: - ```kotlin wrap lines + ```kotlin dependencies { implementation("com.auth0.universalcomponents:universal-components:1.0.0-beta.0") } @@ -65,7 +65,7 @@ Auth0 recommends using [Auth0.Android v3+](https://github.com/auth0/Auth0.Androi Ensure [Compose](https://developer.android.com/develop/ui/compose/setup-compose-dependencies-and-compiler#setup-compose-dependencies) is enabled in your application's `build.gradle` file: -```kotlin wrap lines +```kotlin android { buildFeatures { compose = true @@ -77,7 +77,7 @@ android { To verify the Universal Components for Android SDK installation, confirm the dependency resolves by running: -```bash wrap lines +```bash ./gradlew app:dependencies | grep universal-components ``` diff --git a/main/docs/get-started/universal-components/android/android-theming.mdx b/main/docs/get-started/universal-components/android/android-theming.mdx index 8a70226fe3..dcfdf82e82 100644 --- a/main/docs/get-started/universal-components/android/android-theming.mdx +++ b/main/docs/get-started/universal-components/android/android-theming.mdx @@ -19,7 +19,7 @@ Universal Components ship with a default Auth0 theme. You can provide your own t ## How theming works -Universal Component for Android uses a Jetpack Compose theme that mirrors Material 3's `MaterialTheme` pattern. +Universal Components for Android uses a Jetpack Compose theme that mirrors Material 3's `MaterialTheme` pattern. You can wrap SDK content using `Auth0Theme { ... }` to provide tokens, or pass `themeConfiguration` directly to `AuthenticatorSettingsComponent`. @@ -29,20 +29,24 @@ You can read tokens inside any composable using `Auth0Theme.colors`, `Auth0Theme If you do not configure a theme, Universal Components for Android render the Auth0 default theme. The following example displays the `AuthenticatorSettingsComponent` without any customization: -```kotlin wrap lines +```kotlin @Composable fun MFASettingsScreen() { AuthenticatorSettingsComponent() } ``` + +No additional setup is required to load the Auth0 default theme. Universal Components apply it automatically when no custom theme is provided. + + ### Override a subset of tokens You can override specific tokens while Universal Components for Android render every other token using the Auth0 default theme. The following example overrides the tokens `Auth0Color.light().copy(...)`, `Auth0Color.dark()`, or `Auth0Typography.default().copy(...)`: -```kotlin wrap lines +```kotlin @Composable fun MFASettingsScreen() { AuthenticatorSettingsComponent( @@ -60,7 +64,7 @@ fun MFASettingsScreen() { To force dark mode, you can wrap the component in `Auth0Theme(darkTheme = true)` or pass the dark color scheme explicitly: -```kotlin wrap lines +```kotlin // Option 1: Force dark mode via Auth0Theme @Composable fun MFASettingsScreen() { @@ -84,7 +88,8 @@ fun MFASettingsScreen() { Provide your own branding theme that combines colors, typography, and shapes into a single `Auth0ThemeConfiguration` configuration: -```kotlin wrap lines +```kotlin +@Composable fun MFASettingsScreen() { AuthenticatorSettingsComponent( themeConfiguration = Auth0ThemeConfiguration( @@ -121,7 +126,7 @@ fun MFASettingsScreen() { Access theme tokens inside an `Auth0Theme { ... }` composable using the accessor object: -```kotlin wrap lines +```kotlin @Composable fun CustomAuthCard() { Card( @@ -150,7 +155,7 @@ fun CustomAuthCard() { You can keep the theme configuration in state to swap between light and dark (or brand variants) without recreating the screen: -```kotlin wrap lines +```kotlin @Composable fun MFASettingsScreen() { var isDarkMode by remember { mutableStateOf(false) } diff --git a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx index 1b150f2090..559c157ba2 100644 --- a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx @@ -44,7 +44,7 @@ The component handles every factor Auth0 supports with the My Account API. Each Add the `AuthenticatorSettingsComponent()` from any composable. The SDK handles all internal navigation between enrollment, verification, and management screens. -```kotlin LoginSecurityScreen.kt wrap lines +```kotlin LoginSecurityScreen.kt import androidx.compose.runtime.Composable import com.auth0.universalcomponents.presentation.ui.mfa.AuthenticatorSettingsComponent @@ -67,26 +67,13 @@ The `AuthenticatorSettingsComponent()` component accepts the following modifier: Theming is applied to the component as a whole; individual factor screens inherit the active theme. -Use a custom `Auth0ThemeConfiguration` to override design tokens across every screen the component renders. - -```kotlin wrap lines -AuthenticatorSettingsComponent( - themeConfiguration = Auth0ThemeConfiguration( - color = Auth0Color.light().copy( - backgroundPrimary = Color(0xFF0066CC), - textOnPrimary = Color.White - ) - ) -) -``` - -For the full token catalog and dark-mode patterns, read [Customize Style and Themes](/docs/get-started/universal-components/android/android-theming). +To learn more about the full token catalog and dark-mode patterns, read [Customize Style and Themes](/docs/get-started/universal-components/android/android-theming). ## Advanced Compose NavHost integration The `AuthenticatorSettingsComponent` participates in Compose's `NavHost` when present and does not need special wiring. Use it like any other composable. When it is a destination in your `NavHost`, back-navigation defers to the host's `NavController`. -```kotlin wrap lines +```kotlin @Composable fun AccountNavGraph(navController: NavHostController) { NavHost(navController, startDestination = "settings") { @@ -102,7 +89,7 @@ Internally, the SDK manages its own nested navigation between enrollment, verifi All user-facing strings live in the SDK's `values/strings.xml` file. You can override any string in your application by redefining the same key in your own `values/strings.xml` file: -```xml wrap lines +```xml Next diff --git a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx index f619d570ac..530ee29d7c 100644 --- a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx @@ -21,16 +21,16 @@ Unlike other factors, passkeys require application-side platform entitlements th ## Prerequisites -To enable passkey support in the Universal Component for Android SDK: +To enable passkey support in the Universal Components for Android SDK: -* **Enable passkeys on your Auth0 database connection**. To learn how to enable passkeys in your Auth0 tenant, read [Passkeys](/docs/authenticate/database-connections/passkeys) to enable it in your Auth0 tenant. +* **Enable passkeys on your Auth0 database connection**. To learn how to enable passkeys in your Auth0 tenant, read [Passkeys](/docs/authenticate/database-connections/passkeys/configure-passkey-policy). * **Install and configure Universal Components for Android**. To install Universal Components, configure your Auth0 tenant, and initialize the SDK, read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview). Set `PasskeyConfiguration` on the SDK initializer if your integration needs a specific connection or linked identity. * **Confirm Android version**. Passkeys require Android **14+** (API 34+) for the full Credential Manager experience. On Android **9–13** (API 28–33), passkeys sync through Google Password Manager on devices with up-to-date Play Services. The component hides the passkey option for Android API 28 and below. -* **Register your Android application package and SHA-256 signing fingerprints**. To learn more, read [Enable Android App Links Support](/docs/get-started/applications/enable-android-app-links-support) +* **Register your Android application package and SHA-256 signing fingerprints**. To learn more, read [Enable Android App Links Support](/docs/get-started/applications/enable-android-app-links-support). ## Platform setup @@ -38,7 +38,7 @@ Passkeys bind credentials to your Auth0 tenant's [custom domain](/docs/customize **Confirm AndroidX Credentials is resolved** - The Universal Component for Android SDK depends on `androidx.credentials:credentials:1.5.0+` transitively. If you see credential manager errors, verify with `./gradlew app:dependencies`. + The Universal Components for Android SDK depends on `androidx.credentials:credentials:1.5.0+` transitively. If you see credential manager errors, verify with `./gradlew app:dependencies`. @@ -46,23 +46,7 @@ Google's [Credential Manager](https://developer.android.com/identity/sign-in/cre -## Customization - -The passkey educational and status screens inherit the `AuthenticatorSettingsComponent` component's active theme. - -The biometric prompt itself is rendered by the OS and cannot be themed. - -| **Token** | **Effect on passkey screens** | -|-----------|-------------------------------| -| `backgroundAccent` | Accent color for the passkey educational illustration | -| `backgroundPrimary` | **Add Passkey** button background | -| `textOnPrimary` | **Add Passkey** button label | -| `textBold` | Headline and explainer copy | -| `shapes.large` | Button corner radius | - -To learn more about the full token catalog, read [Customize Style and Themes](/docs/get-started/universal-components/android/android-theming). - -### SDK limitations +## SDK limitations * **Passkeys can only be enrolled from inside the `AuthenticatorSettingsComponent`**. There is no public Composable API to trigger a standalone passkey enrollment from elsewhere in your application. Post-login "save a passkey" upsell prompts are not supported. You can track [universal-components-android](https://github.com/auth0/universal-components-android/issues) for updates. diff --git a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx index 05a5277e47..037c37557f 100644 --- a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx @@ -46,10 +46,10 @@ The `AuthenticatorSettingsComponent` uses the access token to call the My Accoun 4. Select the **Settings** tab to add the following callback URLs in the **Allowed Callback URLs**: ```text - https://YOUR_AUTH0_DOMAIN/android/YOUR_PACKAGE_NAME/callback, https://YOUR_AUTH0_DOMAIN/ios/YOUR_PACKAGE_NAME/callback, YOUR_PACKAGE_NAME://YOUR_AUTH0_DOMAIN/ios/YOUR_PACKAGE_NAME/callback + https://YOUR_AUTH0_DOMAIN/android/YOUR_PACKAGE_NAME/callback, YOUR_SCHEME://YOUR_AUTH0_DOMAIN/android/YOUR_PACKAGE_NAME/callback ``` -5. Add your logout URLs in the **Allowed Logout URLs**. +5. Repeat the same for your **Allowed Logout URLs**. 6. Select the **API Access** tab. 7. Select **Edit** for the **Auth0 My Account API** to add the **User-delegated Access** permissions: @@ -73,7 +73,7 @@ Use Gradle to install the `com.auth0.universalcomponents:universal-components` p To initialize the SDK, call the `Auth0UniversalComponents.initialize(...)` method once at application start, typically from your `Application` subclass or from `onCreate` in the launcher `Activity`. -```kotlin MainActivity.kt wrap lines +```kotlin MainActivity.kt import com.auth0.android.Auth0 import com.auth0.android.authentication.AuthenticationAPIClient import com.auth0.android.authentication.storage.CredentialsManager @@ -123,7 +123,7 @@ Auth0 recommends using the Auth0.Android's `CredentialsManager` for production i To manage credentials outside the Auth0.Android SDK's `CredentialsManager`, implement the interface directly: -```kotlin wrap lines +```kotlin class AppTokenProvider : TokenProvider { override suspend fun fetchCredentials(): Credentials { // Return the user's login credentials. From 9b44278958a404e41a02a5ebe190a766d2fbce8d Mon Sep 17 00:00:00 2001 From: Suraj Thotakura Date: Thu, 4 Jun 2026 17:52:44 +0530 Subject: [PATCH 41/50] feat: add native components preview screenshots --- .../components/auth-methods-management.mdx | 4 ++++ .../android/components/factors/passkeys.mdx | 4 ++++ .../ios/components/auth-methods-management.mdx | 4 ++++ .../ios/components/factors/passkeys.mdx | 3 +++ .../authenticator-settings-component.png | Bin 0 -> 230913 bytes .../my-account/android/passkey-enrollment.png | Bin 0 -> 267709 bytes .../ios/my-account-auth-methods-view.png | Bin 0 -> 151933 bytes .../my-account/ios/passkey-enrollment.png | Bin 0 -> 157295 bytes 8 files changed, 15 insertions(+) create mode 100644 main/docs/images/universal-components/my-account/android/authenticator-settings-component.png create mode 100644 main/docs/images/universal-components/my-account/android/passkey-enrollment.png create mode 100644 main/docs/images/universal-components/my-account/ios/my-account-auth-methods-view.png create mode 100644 main/docs/images/universal-components/my-account/ios/passkey-enrollment.png diff --git a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx index 559c157ba2..1072765388 100644 --- a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx @@ -19,6 +19,10 @@ It uses the My Account API's [authentication methods management](/docs/manage-us With the `AuthenticatorSettingsComponent`, you do not need to orchestrate navigation, call endpoints, or manage state. + +AuthenticatorSettingsComponent showing sign-in methods and verification methods on Android + + ## Setup requirements Before rendering `AuthenticatorSettingsComponent` component, follow [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK with a token provider. diff --git a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx index 530ee29d7c..ecbf6ac691 100644 --- a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx @@ -19,6 +19,10 @@ The passkey enrollment flow renders an educational screen, a WebAuthn registrati Unlike other factors, passkeys require application-side platform entitlements that the Universal Components for Android SDK cannot configure. + +Passkey enrollment screen showing educational content and Add a Passkey button on Android + + ## Prerequisites To enable passkey support in the Universal Components for Android SDK: diff --git a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx index 0ec1ca49d6..73abda40e2 100644 --- a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx @@ -19,6 +19,10 @@ It uses the My Account API's [authentication methods management](/docs/manage-us With the `MyAccountAuthMethodsView` component, you do not need to orchestrate navigation, call endpoints, or manage state. + +MyAccountAuthMethodsView component showing sign-in methods and verification methods + + ## Setup requirements Before rendering the `MyAccountAuthMethodsView` component, follow [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview) to install the SDK, configure your Auth0 tenant, and initialize the SDK with a token provider. diff --git a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx index 027e1b2fd9..225826d9c3 100644 --- a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx @@ -19,6 +19,9 @@ The passkey enrollment flow renders an educational screen, a WebAuthn registrati Unlike other factors, passkeys require application-side platform entitlements that the Universal Components for iOS SDK cannot configure. + +Passkey enrollment screen showing educational content and Create a Passkey button + ## Prerequisites diff --git a/main/docs/images/universal-components/my-account/android/authenticator-settings-component.png b/main/docs/images/universal-components/my-account/android/authenticator-settings-component.png new file mode 100644 index 0000000000000000000000000000000000000000..470a0d3d57c2dc0a36364787815e44d871194b83 GIT binary patch literal 230913 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

{9=$(efN>t?t-?I6{ zSydrhEiQK+kfcDB2k5pfq)6;k4_g;)Wgovs5qmiXW)Uv^#+)_8M`TEL$Gm?H7V(AS zcr?q<8e+geV3hDwM$jNBRAGOO9x`=dMV+llzzI-55<6qVSP8mnD`}YVD|;kFOGzE& zWE3)|64lMeb-sZi4IPy8?G$DYzmT=2kSZT^aHHcQH52>-(%ph$G#+=K&$twyCOM47 zlMO@)a)AfaJ7iSyw2@i%dD2%*K4xoo!ll#=vY;4?21j_6#p?aK#-ouI-n zG2kVJ9*1p0jk{we2S--0*5gM3;l2lIp0QS=X!~)!CBkIFiY?XgZ^BaiWIve#z8Pm0=M|GfZm*vbIq>#Ya<#qK0nB1E-jxO(-h{qh1eL zj$_V;qoH}n4D#(D>qgFm>Y}8FELPA~S!m)gZgwVyHa1yg`>3EtJ3%+zMxZULmf~dB z(mia_8QylG!}-_LsH^Ei)L(voB~XT1Ld`c~gc*sdGt`UCNiR5ZA{LCu9zUD-z+SR1 zAgYU&UJQNsJz&v0B(wM(dyxPZNR$r&G^VEgZeYDF!Srm1Nh*a5Q;uk~zFengtsy$Z zGa+1@Uytdzc5Y~SbBbYKikl5b%p|uehGHx#!lxPC1u2`-{!|8dl7lq(dK({SA8^n) zCJ&S5B2ow00;4UiufL~_=sSmQG72h0?Vkdwy$s65Fq$q1&Q6U>szd56Mp{>FuTYyN8ZA&T8LCd)`-K z%*BT^##ph&QM#dG!^LnUtnN>JbPDuADpw1^Z773^n=Ov-?%9O zlyN^zl=uFT)rI%4(Wh8i!>Z!7mV9n_Fw z=!+N1(m;%`tM6%a$E=adpEG$55k;U?SeT<=Ul4{0w3q#A>cu3GhU>NGxmbyi4EjQA z_Ak0L#a+&}#pN-AaO`C5DYmw#6EWo_tXl0l6TF;v2Fiy$>7+E)h?`@sXHS18cAfU% zGE}*kci46er6tMQK$xtWTFA@C%z1TQNv%)t+`Om5f3 zkAu%YHE8XTw9p}X=t)A0W(=qD9kYxOM$=U&?9F|Kwpq)~+As#mm=P8?SrkhE=({PP(4)59Te-d!rpvB@&_0+U#(z*HN&D19u_$r%t z4sV9-*jfBZjpRj{;_UDzktQai0S#Hu5xY2Ad_Dg<_^b|pnLV*!(AOM+ILTI--Q z*H3;=MOhI;C?~?=?%Hi5C(_Qk@ltEqu(u>O;1yfc%SbD3vR<3o1o}r@W@)%8z+SU* zJ!L5r06=%plMwqGe-`ZvG-SE{OkciO5*Y{(=TgQyw+vBXPsFkoW3XhlHn9CVEEjc& zQQmj1)+0-qhGtY4)t_etRsp(Q4@%$3-+*L4K=UZAVdsKp*Cv}tnguN!ErIky=%u!2rpxi*O__fTjAPu zaVt-`V{~;4d&fo+gW|ify4)WfV)h~}M>lbjUfm~z3AbkfmUmXe9pWq44^TrX!tv^> zJg*!qI*cX0zi#9+h0O$&p%(EKIpdcVl@X?)!?AEQ_>XBA#>ztpkhwT2TN+VmB-=(J zfhPoVo@^L(gXv^1aBMNDbImpOX87=LLr$%czJr<5s3-Wk6+vfU#WbpFCqeAw!}zBP z)I@}rKE^w;wataI=+srlmH53Jt9{SR{jSrWt~Bo9OJ zuDoq}oP{W`70qqrkq<9q(qm-?u=vyaawDbGgf@G5<1`e;5u z_FG@gm8N($9>Oo@jO7(h@FTkCidWFZ{R=ZJ&N6Zw3sA^pqDkcDDIDw}siaA#2K~J( zzIyJ6yPjk8i1kjNZ!;ro1mrNrF|g(^IsqPZ||m=ljXw!{{%FnFz3F zOJ#05f2ij;)IUI_1{6 z?fusgh4GBZK8$>4KNP3t4`LM=kEkW`aNg66#Wqo|we11g_V1E+T$jE+L}5rj3LZ1R z0Pwo1tEh%l$Fj+;H93a*PyN!+A_ zlfX07Mmq^2f)60Z+@h;qokeU45g;qyyXz#&$D88&cbLAj(6_Uuht<@EBwRdD*XtO0 zsc0l@bo#gi&50XCxYSN88Xe^gfcZDi6MPlew^2ED+9g=G2pendzzf^)k%lPI%B$VU zhSp*W3}9ow&>mwG*obn#C`Vz3t;MW|>dbdxSVqh9E8yeQq2kmL=UIKZz5EjNyWB_% z2&6lm*|<09Eg;jvChuT&9h^m1QF|&kbaq4ozx=_4W&h;uk1QTV`wBt~TPBC^DtGjw zhN<<$n^y z!-IN6K~%miC#_d#ToR+1k|%+EW7k<##On4Xm|}$9Q_}DDFfjQ^rMzZefcA<>abRWy zKo$nPzhrL-neufjYvLh39jl;KAwhnYPV4Q(RMf#YT~PPUGSVPrv)9Uwjp|sr*dmCq z`UR)$Uo6l>s))RG*~B-OJ|AB@pKjJA9Dg$2k6n*1)Ucy4oZ3lvqAd6}$m0wzW~1}P zu=DL)=WAmdSfq}?<#MMy3#FLRh9laOvZ_p94zf+Jy5e_@@si_eXVEFi7V~%I_WMzq z6yQCE(nK^AFO%f(7&bU+dWU|>++(`OPg8f$JellLD%~>k+@4&c%O?CTtFLOFB%G%WD3#|@nW>lc8YQn~(iL4S zBz1169d(afm1Ehp%+h5!OJ*9%R^>QuN^oN`jAQ8-Kjl)C3lMvvi_sX{fZ|DJM?(xt zX%dsu&`LBMk>pW}3HD!c_-RqJsHHBrJML<)S<@(^@93GSqPXodNW?X1NZI z+{qLy_{oz^#9cuMSvmk&bOTR5Sz(EVsu1WG!a>fq7WGUo5`Vn4oBZA1*d!n*Vx#UC z@9NkBi*_qxrprsKUKMsB9rffB7u)>0)$v;buB#C?-twMnZksn3COB6KZnJD78Ff!-KgnFXJ23k>P+^Qfl$=#e&B| zAb{xI?Hh^j0p!*|I62M3w08b>-FcP4$YAndX9Q4=1Df4{bsqDN8&H=_PT9u_(6D+ zs)7%ZKW13kDm|KeF}H=_F#H4dN?08ERl-q-N@+_~kRFq`8vg5QTL(GBI{nSDfb#)L zQQc))R5sCL21uBKF;QE$i2a9FQCs5As6o|db1ZFJB%jiXTUy+U1jM*1$dsZZPlit; z*TDw5`5T#7BKDY36zcDlT;zY>bpJNVQKxW%W9!QH99!YdHi`+>j_))%w9a;-s zzwwCcJr!JGTjU^$J3?uLQP&j($4E@CH5tq84Y~mn(RMYX34IAQKRK*zv9UPSQCrLU z4@w9^1p|m^PL|=^00H9Eo6EDWWjwh&F5{ZcctDS0ci^o;AD^qfmAaOnAdr`3SIiqW z67*#5sXdTW4rFjc8jR<9q%>@x`zNgfje&2Bje&xL1NqP~FP8KKQaNJNZO7|4cU}~cV?Ja2@3n~{=z*3BI<*wId+BB= z6N*a@)?PAsR;odcW1S68iRsOpSy)`PI2c9X5k8i8U^{Ftb{2ZTGgdD(Q9H_8x#-UK zqXgNe-f}PL`Fa6Tj zgEDR3`$A1qUCorJk`-mm+Bf*+u6U_aQ`t6YdibST!#|h+-Z=ft2!vBvppp4D;5}k3T|4uvw$0-8G}WAG5s>xw&b1t-*M`U)zO^=!cliz? zkYyaGqmU}=q+xtFo_3D+Y72rdixI>qq7l;25Y~o}j@xH(`z>e?^HQ>~eyop?tk2Rt zdx^;kuXj$vUb<6bf08(PU`A`QWW?jj<5%;q3KC41D-TE#A)%ZDDPsl2`=<0WeSklz z4tuV&_Ddp#(EcT^hOzgHoF(git5%XQ#LP|wVAL-f#0U?PgS9h#Ow}}5Qz3ejm`G$R z*by?beThCKo5%X9N>|{&efX2mG7jT~%5~et-sdf!3cO~F82X*?kU(@R14ZE@^5;!5vJ_Am^TY8n^&A zZmTwahfh29whzxlr3Sqz7iy4Iq=D;Bn4d3|!(LG#@?d|w)*JSV zOQv8lU(e_taBL1C=nLKkIJjEM z```Ec|u*sMbQ(QE%qmSkrw6ROB$8R%xgav{H7BL6^sbN z7jr^vg7r|UVKMkyOI92QG)#unIc6o_9b4Da#~(Y&9NKY52I@H550JXp zg%`8)YuB)+ez9IQJb5!y6z`qu{DAz9^6#yj&5VK&ODy=cJg(9SuOKQnQA!UZ6#J!ovK`+c$ZAmx0wTYZ1N z1Dz%A2N_XOoBN-a)5Vfc3tK)}H`M)mu|Pq<*>^TQ{W*SvuuBHg^QT{;DDcb}aafo? z|NJ34sN0?_BJVn6kj9A%8|;f?nd%Q597$GvFAm{@L=QMep;Q?&D9B+QsaWA^#UItO zuy}5M=y@1Q_$Ur;Uh|<5H zR{f?PCyz%VG;3aQk6!6x-gydXY(b{p$R6^Je%}A?`zTT+ z*_#TP!+o17E@OI1a?-4wY=W1`US792@gi0;jO|Vf)fx<<2&UY!@Kg|U9p69D0aXH8 z5|q9haZ#JXB)kT;E=63TjZe^rrdfaED@$7JUC%K|Z0ZGhrPq{azckAs3x%SJAPpm7> zwKeMh74BrCpOqj-Owo%}F}TNOJLJN7 zFZMXB+onmY0 zjP#IP;F%k)Ump_4L+V>c>&K~`^R;Du=3yu3QO!M{D3{pOu|p>o?`ef>=k76sp4UH6 z;Yk6U-Q4z(FX>#hr$mfSAY&A>!Cn_d_si|j;*rbMgRA|}VN_9$-_F?n;wEby5|_1y zo{yk%os1&H0{N%4Sa~vh98;1|FWUzvP=a!;kw{_wCeZdd9nw{4JF>M;{!omdTcOK` zxA*p+W~U28KMHjwTQ~Ta7<2p^Ly@tgT*Mv;4g(4iGAO6(T?B2?zyiWOo?COsUMwu= z9Glv?Qn^JNGv-(vI49#iDR^Z2qqs*TQgA(K+ZCsup16Y;5bHfvZtXh>k;5cAU=>z9 zqkmz@Re5VCKaE1u<#nXzH-Pyf`QGN{8nxBYys1$X)@|3}hKz^VN*T`Q8(trmWezbcwOv4JtknQlhyhfg7^_Q6B* zn98_Ax}q!)b+0ws5n6;*wfOXp(SayNqLgtHrm>ypC!VAKsCv1C0p(4}WuOjo%a%te zHcKmXVRv3X=jd!VYoAz@5zVc4&}@msh_cPyIc!jp`8MO{=@HaDj=kJeiIEB@T(8`O zOi(_@WX92J=_{cdS1=k^M173KfSS!u%%00GeKEZ}#~YlL?Xf%XDB^>$N~ zVr)!GX?r!3Wf9U z(D~!rAzRi&_phk*r^*?tZHPvU_nZ7oR1!K9nZwbj+-N^|P#|n+r-90R93suGfeChL zI+`5abs`(ln{gK%Ucin!jN?8`+RW_Ya7g*wDhZozjR6PxZ-8D~Ng(2U!l26t|wY|O0y>@TNfv|bO z>KK1KMgl#T03@a%u&2fZmfbh@{ zas>Gho(|Y6^@?|K;eI1eE%xXpmY9P$bQ;-%9hK6Qls_kum z^TOWM#VbC1R*@$HJUq1BqE}k;w)*VK;@>=<)6;w|c)u&3gocr52yJO6C;h5|#8hoE zcYtBZwp7BLv6Nn5eL(-|p$m!r=zQ2jIGV`kiFAMT3rBrvYkJ??H!VCUEQf9TOAT;&k)ZKfF>mMk@48P4 zAxuuYTA)sP4c%_?wo1wW!8Ib1E0sfHOu*MRh?fnl=Q4INAq-3)Cdh81-(TyDe^~LF zHnAAXd8}}fn{Hs(C-@}slF>ZbF#P}P8J-0Y*vuwR;_NAV#5zKkSxd?(5gm2L%?PVMc_W)v zWr2_ngQW`zmpY=l!8lY2eR5$VffIG)7yd!pYzr>^vX~~#=zg+~KRJ#3nU66bX;F}2 zJq2!QLt@li3Lo1l4(e8qG{`&w&Hq^GP``B}waE^%N(PUV>eHf=xMFgq@E6Zx8THK? zXjldptUNWulI#5k-~Rey+8;)QWGJ#cx8qv~+v=lJHC#sMH4dJ)F3BK>JNyD|Sc%E^ zUX9W(H01SxPBxr+c!v>re75gl>XLd`i$woVfe{ma3TuwJ&;c+H(x|** z)KN*eMOH4$a2rC4!g&-+98%xu26x(lX|yjl_+Z!^E5;xV>%hE!xGS}^vDS%rfWP9} z@1%^kM=f%6YUhN{{GoA60|Fc<6mU7-B4zDwf~~_QIk0AuILo#gcCd zK0OLRxRG--<&{GRM95;c@yMuy1P`+VU23(nvL`YP!rGHlROpcF?F5VeDf%#>Z~~BF zDd-l?(aJkpEV4-EnIYr^ z%Uv4K+xg(0P`By2LNMfznJ+h+-jV$wOpNlW-i5K~0FFGz_SyTIMr##w=IptDl5#}X zk{y_9(e&i&Q0MK{m1m9=kS{&(B-a(f0DgjZxZ$}3vR8kVEPlM&qn1s>B~EPL&0oIV zRs~V2nqrRq(kY#Ct@(v|(LmQkho%r+v5SMT;%|gO{4`q=_Wjf?Pz}aZJ-i`W%9j&f zDcyHN)%*|EJbUfrg z;@Djke)&^G;_*iJU=9(Rw~=zX)b>9C_ublmPaD3PVWIiMrhy!QZ;?~g850G5Z&1MN*r8 z3IVes!;g{IpVpBo$FUK~GOvwRa}X`j5T{tx8F)8Y6~MgG!Ca3Hmm1rQHmQr8xtuUuenW79_@}016OQD{IQ>p?s%7Wg z6o=Gtv^9==7bosrr5;mcTWC?1UEB0lvifkom|Y|g;SzH7IzfOVF1(J7BVMT9sI<7g zl}Gwd1(yIJpZDxL+(_scgUt$(o)_*hk!D`&C8QfQI7&r5EkQ1>!MIK7?h8VFFk@pK zIPuD{S-_htXruACgGY*l<&eV4g?7)Hw{tL?~=) z1d=4<3m>qdFd7PQjb?|7B#H1(Mc+N#-xl!Sc>-U!dTH~(xKyCOT#nEFF_1+@ao z@KpEOvhuPpnQX3=7q+84zD#GOz_J|`#TaFE2)VOt3;0ZH96*sZf9JVd#5kmby|?ek zQYvRV=JR^nFIqQc&N}sJXb7HaV)q{o7=2iBrPuTO3D{u=dzh*${AZhVinZEA8qp?_ zUqc7rP<1JZFX3)z5oj1Zg6{KD~!myDk!%oZ;vR}C(R^Z@`}Dk{M(y~3obS=I5qYPNh^ zGsKNvYAv4asJ1EUoHGT{Glf(|=qdhXvi&zs8Uj(&_lgUtm*4v}__YDUSU$+7OfgU*1clZpyI z_5W_q%K;aXN~KmD-d}*bgEByYT%Y})c|J-pa7KeugvoksefapTQLN`6DEp7w3KuzW zFx&;E2Su+`YDdZMFKJ6@MDo7Eh|g;$WHpY$nzMWgLrj~iUum&XZgY57Y=4_lki3yg zl=*sP>;fu_a)-u9U}u9dyY7Ektb=Yv87(z{gju!sZ*YsSwBiF`f%1aikC5du+wGun zYHjkfER8ZKgf}ny9vl_Kn{YusKg_%;NTw1IK^S@<>WiOUq#%n-RhsIxrJN>jAE$=+i+&k(UKw}3UJ^SZHJC>W=Tz1|*64MnI;@vHbiWD=}mU%P|qB z`eae?TYoA*l*J~7(Sz)xwDJ{43zM+J1aQ?s%c1)InNg`#b-^oV4-i(fp z8jQfjKU2kwJ6gnASEXN$Ov&qzel@crPlVO^ErbS+J1GkM5$R@2qR6Uz#l~%%t0v{t zQj6w_ROcSm+`J2dzE4U{5oRs)9Qa0@^61-lRyYxtcSdzQdx<-DU=!VRH@yh=>!%Qe!fVP)UbIrK+_w+_k1!}}Usg7j3n|(nP znz~MZSX`8s^lU_8Z$J#+*UNW2k*}Lh(VzK1s%i{M>yu69@X`-(GEZm5#T5L4&z?R0 z$5Db4^wC#qCzdUfWkzVB7rVFI|OUF^Y(e$u81PR$uSa}S0ln{&4vVq>6?nUw^ zxV3wbsUAII9P$h{uE$sP9PO`Df4~?V2aseM=YaFtWGtcTRkxf_RJ^)dLJkKtAaqN8 z=($)g!XTWW&=Hz`usH{bG4WIe(EcStu+#fBtK5r!? z^N3VlS?Y?nP+$xpEZ+zm+f`OlMOX4X!lBtu9 zsTa>t&rzFoIqJZ^WWn{PKUN-ncuVxgP}OUQ+BZkFtQ5HB%>~Gyu=Sh982KA)Rc7Nb ziVA+l6oJC-=3dnGakvL@GNyc5%81Dj+-CEe6eBZ zYc>s2z|0np(2Vj1do+~1hO|A73zFoeBZD)BH5pM;;v^dlmr)B$m=`Hq%Kyy?{I_R| zg|Y>b1;fg9F$r*sb;e_>lm_*)>GoQ8^t}}nJqc_*F!<>?|BtG-42q-c!nFr?3lN+k z!GpUq1V{)$0}1Z#?hNkk?jC}BaCi6M?(Pn!pHp?}d%yn_HPb!4d+)W@eO(=sOx&+T zhUv7uDP&KQ@`I@#mGK8n{$G&*SVtM*EubdZ2?%(;`N%k1_-t-?2VA%xu*Rl#7al4* z@IJ*5{SA$;&+pA}QWG|``}ni4SaH4=@fWL1t6vWX)BpEr5g*1!qmA|~|ityB|l5eAG4URY?Rm4K=Ye6W* z=ft`14yf$^^A-x}a6ldio;n2ytGrvq35=POS8$QUCc8cl%D$p_3$IbL7m(3_?~9is z+|Y%VEcFbbhJA5mGya+LF%^5SRidJvhiUwO4oij~vQ1Z4?#DR^&RSq!DLyJj5)1gw z5Q2T;f@@UBN&Femvnj)6Za!7{mKrT16rae3{OGhG{?xdd`~Q12qQGpS@4|AJsWZCJ z<>w>$ZoXG6K$tcu_NNxH(EE)hCOwk*DJ@F5fGh0J2t5x5I~LnlBaF{gY5w_D(b+@D z@an`J$rGzTazDT#|8KVq-%kWPj{H)Gs#lCupLGZst0fSQg23bp)gN7*5L;c z;MCwbevipFc^^I2%8klo7e}pX&0jhu=Rr#V!?8N)9(`{X};D zr{f5;fBS&o|FxdzpDQ$h_a)NbLgj)hcp;z5cM1LW`{*170-CByB}qndS-o67h$%*I z$R!Z0>Me+g8uZu(tI&XPU~StSSi+;pO_7Ci>$HI4k59v(oo*?-Kd@Z^!3B{V~FWvk^bb87u}6`-OB=+Gp6Yg^I~h+Ud1n; zC5@Rab6lcr9}l#}KSn?=ZM4%5DNR3e!C>CFfz=Aiz|lMabi&f$kZ%9W+FJk!G198c zh1vSQ`PZZbU8mxfJY|%Z(@A~O=;vw2;mrPGCf-zf`#T|lROPC7N2hH|Ef9f^Z8Md@ zuLfq|%9-+>MJXOZ&3UQJR%_&u`aeyU1z$2(XImPW5||47BYHo4@$ z@@L8xi)N4XoSSaza*pTN=|;=e`93E~Z6gHioXh}ff%^&CGmuO-ovT=z(3;n%3uyYU zU8`X~S{Jw`{(r;!>h%_UU2aN5u6z?3fUR=$?@AC*)93jwCGK$1p>01pI|}3hGj|Kq ztSrWa?mmwKF#R@^Jwi0>06QJ;*=uWHwwOx4Y8z zj4Q`6dym;)%3M!(XV!CN>hpkXsrZD0UE7iQeXF2YlD22c%F`WjqtJxlbq<#K7?66y zNok4@q}=v8wa+pae%^SS!BODk<~AE&en|xs_79_}Tt{gD0O7kk`5F`Kbv9DQ{C@xh zqI1EyR01*RQ9tlAHYFy~UaeK~_D+)aYRi4E7gg?6ZIMtbkQDZk7T>X9 zASNTL8oO)S#d=-;G79vW{t4bzMVbDWwo^^(FS92yUws&J=B{v?WvFxhM+Nkq zkvI4>;wXrYi@WtF@kxB?u{)K^JQZLgw5R=tZK&4XdHOGB7`|ItW3{&YdTU&q>G`nZ zfJvislRDqh1Smz?SC@f*TlI9S=OLMRjb@O@6Oz;kxI_N6oLE{bh5%k;hEZT1?C4lv zvptZXt0Xnb<5+(bNCyt5SwpvuZZp89bLE;PdpiL4jr)P?QLA-}?2MIBn^GEbQ!IDj zD!7}hKm3$4U9X~da|g$Ge}wfa^pv!lQ1Oh5)Bc~UWHfE{n&v5!tO#(|j$Z|Q*0Hl& zK1K2*a4;)b!YnV(xLX0fz)ym7N(3go%#>ghE>@RH9M3jWve6Ivtj>8`RJsCJcrfn#+V`Z%36RpG$M*w8pS z7pR>A33es>+OKwir8?KqUE-(!ty`s zd9cXZe~6GV!7J$}!$TU-vDNb593YPhmiPRt zB>H|QQ`2d|5X0aJP^qypY;jb+MJv2P|H@xLtehf-?vtm;bp>g7v{_m8!X%m~k~DyUfTPj%th`X*QF-Rerx zS&89WP9J_tTl;#r>>71tehpCWQ*k242UyktIq6i`BaoepV=o30wZ?}9!bun#IXzJb zU91CUcD#--TyBq!x~?wETjUky-r3LlQNn87%F70@@BzC1NiEydqrfei7d-qCWk&HW z25hObzwvwpHtWXBvM&F-dASQD+p|?|Dp&6(3-%cPH)87xN|0ezE>Ryu)bIH(B zaKnG=`cx%6`Lea;a_Ee+{i(T~QtH1k_~l(7@_U5myR}x+FUj3zObZYfwC?+MW2Kn?FC3=@a4#gVsJt~t97UaRubpLjnxpuLd5Jz%E#qn*`UqpZvopz! z`qvZiYfx72dtkzk%1c5WaVu$}k&h0do7vg2NuRd<3f)!h?;!yG_lA1i%C!dV z!=+KA9ZnKY!n7SUD04*?;%Goy;{+SrJz6rEw$hu`TJ@QH(eTYVdWQQcT$;e@B+7|t zQ3iKF^to{BMcT=C* zWCvVxcOFJUPy!PU%xS0>Ch0%Od2jH@%Guc6@eWOc`_P>Q_k6)z&#-F~EXVHbyh}ds zs7eU@W~L4MGr7}Aik9rBAWw148jn8L27tpUb;bo%P)eEpvQMZs=p9bSvE+vIyD}fs zZ-W-zTs z9CnXlw$C|5mfjGIR}p-op~=t#Vqz>s>x3)!uNk}qUgv(`85WM`@8q|YK|Ee}&Rz^9 zeMrLRKD%sDuHi3_4(;g+^??LDo)RPPH|Ci;E~~-f6h>1A86Ekp7FeY9%%zMYI()D9 zxZ>Y7$!+8Pc+ohC5ht0+{iAaQdusJAV!La3}LGLIjJval*d!bWG;_ylnPeN6z?}w6Xrt9nW%~Nj0liAjsHBV;r+_+5UC2 z`BxG}q*f~)ldM43Ua+yh;42-8%KhCjuO`V!dby^p=1r@>^3k80yeP<2VH@Rn0{`V+ zQ+a>%#Ek;M{6LMUFt1(&Vpw#Px&LzjzIC()lLV_gBo>cTj;HjpoK%uAWIEqTjo z<$wX zERxN5oGVszY|b=j7WjI^C(JjT#KJRuEkb|th>+x=xN5JG~ zG4#GguNQT)?--BTKU!a_|8wjb{K&;B3AjBB0qy<3&v6i!&3ea7q-;ulzcO6vLXI~C zS4x0PfZUqXp`ifHsi=-IIWuMcsG`06&g1bKXU#?F*Dpgs&9W4tbwuIY|xiN1c4ryM=e1l#4L4ng745^ySFQpH>4cz+ag zde5TuQOyQwz{e^{aP#?M^X`YHrlANlt`v<)tu{W7>gHgkxMonJCfy-kQf=;tfElWI zHju{7ZShYhG88{HM9AGqf>I)~+U`j$9q#M6($#0R-}kL<2_+ar4(C!`5(vh6kI1gL ziOiZGgY-@OPhsE?k#+Jcc&okZzmNl4eDZ{(B=gFjT|MASJy1a;fNGvhSOXwW^39aP zBO?dOlB-nJ*g^wLoYeyFRF|vtgEkwi*JLeM>y8F#w)*MI$Ag3$Y&Jv(7pe`V5~xoU ze*Ln%>C(1r=(w545i5I6OypL8dt(>MM!RCZWa};C*RR zZzy+M%;IFMW6^B-`55jbQ8B4?|F70^>8nG0!p+QAl(p4~BRE%3U^M=rgy&3wX0wwS z$+Lr6gO&ay+EuLJfcsK?*=8qT5TtSzH1-XKPDt?Cbp~v@!uU5>tx!DZC-^*0w0R1C zervpqsF7;?>o)tFMWFRL@p(&SNbEJISiRv?sX+u-wFi^Gls)?56)%p1$0;gZE}`@(EuF z5`nDgQUK{pn!@*a4SUOL0PCRs@OmKUEaANBT7*ZBiUVTzdS#eYZo4!z{7kZDH(a)O zib}@&e$8PzVv$DJ^>TaP81ls8_-x=hA*}_-B1NwUD5Jg=XAhuk2PybPDHcjkCOYC( z67XhWaVjg72V4E!aHHpR3X;hbq;J~GbdSKglVDIT|Jj%?R#k(LLS{nwHGE{G+CxhN z2Df&D19;jKPJ#Vu^wcJqtGqShL(RCb0RLIbRo><0B|j(5oxJFDA-Yj>9sr&3n$M1U zr<+9HJVEF(4cl=tDFF_9Jz0DG#csdiIFBODPWNt|O)7NYy&!O`NxELzL%1j9KEB=u zY}{eMCAPMkVlEOsHd1SYs$SPsc>H>~1x~i1guiouhlf@VX+d)m^121-qu^$zxGL;@ zOWocD4jW3G`h9i8_nrW2Ph3v;AwQnU57gq{wg%AP79Dq%Zg$xFo`@9qrPovha z86Dkq^I9bTF{)y_Zm;ccEV;*@Y02G>fABe5ueEhwI$7=>@=7NvJsw^3&kO0n@DrwM zLoasrFZ#j1vf$}H47Z^pGCV%a0DjXXt0D|T(qPZmtG9RG>=T#1Il4bz^ye03x+y@n z(6gFPA6pTH_B9($nQk~}(1H6KaZ__PS4^-DFC^AFfR+VWd?);w#c%(7gR=Bwj6ky= z9Ob3J{7ujF9yoPIwgD&!!hhz50*kLph)v~_06xuqYgYg8Oc=vc1eZoy{!Pc%sF(C7 zh%~$1XHb_qdT8X<*~N9ep-9`OhO;6 zx%mOy>UP8JCT#TTO;FsX^)=SN6V02B{dGStYQXiq{0`g+#9_Y@J!>MMoP~!+)%DA@ zLLyx5=*$~HrE4dMa=neP)?iUnwUb613UEHZ1JG5WnO?7albswA?ko)UfA}u6@=*%+ z>^;d6; z#WHoO@Qd$0N7h3)Orvk!pF^RVx2_${5NG8pQQ-(_isz=tSxSe+& z^jPI*=C!PSgeT+JDu|ns_0GoKq&=?s^vsmy6=%HnS9Ln1fR)T&VK}ugfucii+~t%k z@|TK6Hv7j2y|l}rLFTg{THdpZn8%PxwtHJEBz)t(#R_c*?jH~CY4So%3aLa!wqD4z z|NgX{h%By|1X#MPu4UImom)Lrz0QnU9!~VDsov+mFSkpjBcqc&A#wQwX!B(~{EG~i z2%;UIk3m$3jzx40;s9+6%(>NP{Ou$*mgqWH{0H`N@<(z9-}+ z9H!Z6Whc(dw#}EF*4?8f^(IF5Kv8C))Y@7c&{<+(Y=>7ntFDV^#k)S8G)U=MF5T9f zh_dOF<7U+uB522FWQSkOo+dTNq9lJHmMhZC}CWMeVR*pCYlXxe^}%d4?s zMvor}276rpc<`85-RhScsD(Ls9TO1X?5K1kSu|xSm8+#Sjj4J%eF~$WE20GT{8H9r z(m7a~RMCTr-ePey_<9daosy`ysSGnP8rNH$7zOA11oae=f!JzM#*u3ob|}+8*oauL z#t1N=fwkcnt$*N=V^!CY-JLZ>iN#}}X*I#l=IsMBnk5+!g?7{S_WFdtUEXpzJqfIZ ze50ZV`tbW=Id6bvGX#Jty>ZL`Vj`b7Rlz}-K?=jK7E6P^J@F9#9pL{b26^$TbiZTP zET)}9T}-&EO`5L;v}q4X+cEDJ!G{6QFOTz9!$OY!&MM;*xZZ4sHyvc4mL*V6E2i6k# zZw{Fadi%?*0D8x(nq^mZur!=6h;pV_BI-0Xd)XlF!|G)F28ogwqA`uva3a$$$jgXv z`5!S<%OFy?+-TeFg~9ufxj;(`*t+3N%j(;9Id)-vM0U@F#qNA5{^27oYmc0aN^$!F zCiU8Hko@>Nl?`CUeAS%OOW%$WI)owH58+vZD!#7;wp^d>PM;F2NjxEU%N&XQUIUvl z+9F8x*5i$wDth&cSM%`P>kAk>%h(y7k2X@7kb6EMz~f*MK|Ap21;gz(_@vr&dUs#B z{V_p=Lxk)REdWr|e`oJVQ9Ab>eE*mNUB}IiOh7MH(tcXxq1tP4uYg@<{Tbs&Z)YM| z9o9*YyRN<))Xe6HpyCU8H1?>Hrz@DklNS2~_EZ;zSBw} z%9k|qNM@V{L)9DY0*qEhR^{KrLsY1)^yiQd+aGqlX3>#-$RVCBIY(C`;u?it|CE=9 z8jV4_Kz?w>bmg@zP$JoTvbP+=$7?h$b@2=6nfqIIWdCVW1$2i&!50~22^uGQia=FH zx;mQvkgUq!`H^~DVfp%CI`2o`*EHWlIy7wK--4F|Vu#Br(JE$7khi@zsb6^UFdbc& z)h-vY$RY#bMe01I;HT^G&yhP|k^QoURpOUDFU+Y}A24?ILEF=5+`Dxm&MIoJkz_VC zM4jy1?l`O(Gb0T;%Xnq|KzhY7TtdU>WIp@C6N~1V>LMn)9WqyqYJ)0_rizjXiAYk@ zVS$&;&x5^hKxJya6b(Y~kC5Hq_X#wu+>m8tWyEd8;;e#r=D$}Mcfh|vqZMV9wGm8< z^Tg_Vq-4DVtbQE>bbFr5we~j=4AFvuu}^Up?iDjc*~~5HAM0>CZj{@be!cAf$MJi_ z^bY2~J>n6u?2}GdAD)j&hhQ$VySJUxYfIkp{>0|XEmz?MVb5G_1c8;vOq~&<#yw7J zQqq4DWbXj=(GZ`&QMEt1C6B7c8HU5-D-jLU)q#3sU8sSWe|HkKQ=gxWjRp@6ON_jgatc??k=LdM3vO814vBd)5}f9^Uyz}kT~c^cq7BT>wuS{X@0NSx~RTn zIj=C`hb5d{(7t5VECaU)fWN+MDZl^rz_>yE;^#x&3Rh;F!S#8#-J9AQzBckvcFy!`WCA21FJU z+0(TQ@t1tlfrgHW&uuR!XT->QA!h9`LfjEl!w&2yBJC&j>a%Ov8TBwfEf#Bk80YK0 z{A+OyySTiY`k(?el>!sOfkx6L;4DFD_G5g?cHKSbnxR?}NC4?@sCRnk5q1;~_&jy-?Y+P%C^5~UA4v(_e?zAv#MyW*obtv9sOpi~*l()vgvQ-!|a zWC6E}*W%;0XsYyXXf9;TS0AC#K$ew`w;LU2M_Obxw_6}|*c0w!n(k#}qyr}$9BBq_ zfXE(9hszEI6E1Bg*^0*Gsid@-S(5R7%eUybq8{WtuN%NLXm2MxJ*$4{e z7*E&v_9$`KLpOLWPXgrCz25yXLhQ(XcJ{hs;`s7JouO8P8jjrxc`=n>Dqu6=jQ6TV zg5xtXG&(Q6yE^vAm96HNtHnHx7RX52yV*Gsm;~;n6uk&P2L(*;_Or-9g*eFW_#cNw z@evJ%h!^mT{K1?q)YKtkDxr%NgmKB1Z@-AJM&_KV8Z;kCt}67FW zlEm4>#u!ciQf;xIkVc)A&94P8v)N?I+Xh|_in6Q(bOOa05nz}>d>lp^lshsjSUey> zBrI~OCV8`pw#U%@llh8@cy+5+YPCz- zP3|MusDIojaS-8{^m_Hv{1Um-H>~9IY?+TK3hef@Qb4*}5Kng=S;LqTGJbAA} zWRcdrOb802Lyao^b0FfgH@|}k%R?HQeqf?qRZ}$5C)CA*sPji)qnw1`+d@bYlQk^| z{#5yu9R5&ANy+GjU)>MZP=s>+5%$LIW_F(I_jIC4NO4k@Bkd8F#XnYc@)k*o4FDNj z_c-$3j(B9bKChjFg7OZ)>?%{$l&NjZZ@P%DGPVME?X_8SGK#PQw6MueHQV3dosF>W zkQq{{dEl`Kw-O=v!Gh=sBIpRKZ#=G!>ficNW?*-{&w(y@Hg88vn`@6r7>9|)JwaIu zBSKVy($bMTL=|$m!DZJ`y$zHrX&x#{9oQqKby@*PFfL~>F4nnJb57I&oXVQYC*Pz8 zLD2O_w1EN0+Z6;Yn{xgfxABWL+>BNG3-@H-;A;Be3EcI`Le2c@8naEei``Cw^4F}l zX97-B8u0adb{^fXh3a?z{k~;ZwJUd)1u(ol)X!Er!V&DW{p+yKJEw&CqX%iT`P1f2 zZUVrs=MvS=Y?&ew>=f?fkT+kGO`)wR0K4vZRKv?8@WQPl;`Lz0=GvhUuoHE;At|;k zpsJ<6c2*IwvwFwjC4(1VRY(`6gOzuci1Hb12m zr$}=f>WBhrMN&SK zwwhY*3E;criuU_n7E=n51#;vr;DW0#*d0P>3!O4Kc2cnMPdIW~fBagLNC@}Q$;BySHFxW#mnqjeshLau~|hz`1& zmK(3DKDs1m13XyTs94y@kO4n0^6mFqJ}hz2`%E%vt^9&j0L6L-OoaZ^c0Z{j zlEQX%eHQyl1RudYu!}T7t6%!sS)gTgJJk?#dL$ih$KXLc%N^6rA#21bB98Le?2##~Hs%0M z+FBUc^0voMaQLG~+W|K^%YQG-(4ZUtuA>XvQKvIJ;4E9+@3^G~i>Q<*q#iVgyjhxp zyLXa*9xHe?0drds%Ci0UE|pNNorXPL=IIf7?{T|; zi!gFf)e%c+mq*{W9J_>>Soon?yE9nm3lr?Mv48nMs!L$tCRG_doX{j$? z0=y&lXxBGJc?iB^bs;5YfP6tTSy6eqQG=Sa(^6iPtr%pCEP4wU9`SAy)>+U?`h$|s zeu!zAZ@!Nno?7?XRWn$crZ*qofNNiD1sd1w4h)l%ZCm*DR~xqz=<|O8$`NbaN7GSd z+M4=1{FDd>Yc)ER9ZLqGlOj*=DhKY}uUl+_wD@$=J3k19P1EUaMyUvst{Hp80W}eE0cvLPl_t z68hkSrP6jeRKgASFZVC6xh_VI*e+6L4xI|76z(@fYX0xPX3eMzpqrG@4?ZoGhpaA- zfum9OoSxGMDxdO%RZ4{~W2AbJ#)qje94;sGB!*#o?WG4wlzyp_%#e8>K$Cy74erio zJ)$4)$yFmF zd7a^1!qa~ka^DP5t+E@LBSIKtrz^C?qdGa2p0xVfX1^!EZXQQYF=hvUa(1*?Aur+8 zLsacoR@Y6CNLTrN8)=`IP4Dmi(4MvDGUW@&Y7G#)c$cGGp=I}RwH+cL?@Daqei)hl za@78s2J`RC+*z&~V(Y!`kFsTGW(*3XZ4~6E@WxnsKw?qhwivfd z#*(?Vc1b`Vph`qA$zQ&_v{Mzh{LJoJ$+&qGd%craF5ujj7GqnAic2dyv@gHrq=6D2 z63%h4K~5y+drakl(HLYU!ny@=xDp_W=3$&(X?C6$NIa~>?%)1BK9+V@E2FTg^m1>2 zDRuSG@=@-Q*dxu>_wl?{B<6yo^_ z`W}ysfISP?*2%+fB)LeoEE_FF#FqbfuSRSOv54!3d9o7wUNh$5nce4~o9?PRuudPM zoTP;J$e0GN;EcXZP(?`8)}^(ZZ6Fk{$gThXcLQOS-5IN1&t!U&(4+(`L;-=+ea; zL}N7j&qApyA$0h5qRxEYFut9f=9QvBg^tkS+&SCw-{=nh@2KzYY&ts(@NcgsS~Gw8vw!) zeX!Cj_w{c`P`14ivS3I2ARmS)htcLcY#nUD3^s5=x3W?7HbTZq6W<7_gf=l+4KKLdmO&=#E}ghxXm#E) z?BRCp#b$1pgwf>hmXL6x@W${J?kPD;jQ*z9>Us=uvXILv#Ayn^sTz7gsuKrTG~BG zN_;>dEjoe5(sJ(mFux+7FDQX#iK@wKI-Qs=ghwptN1A_-W6)}nRx7e_e~w-G%wft* zleI6An4t1U0&~8!SP6P43O;v*X;S&l1m8qAez0Qo$6dH%gXffh!)PQLi?G_EpUgQK zYyai)m!4}TzOSO(Ny#AnUI}0OU^m`-WPuTH%%yggr61xyK76R(>*HU*hd${~emEz! z(5r_-c#K`7DG23Gs{Qvq<(o`tl_~bC?yD{JUs9&#T%jR+OIzFkmo8EwiBp!01K`v$ z1@i8wJ~{snIi*p6+pEB0lDoxr@A`(~-vuW%yCM>pWf}`6qb|}55p1NEL;SS=t%QR{ z`f^9e{K(W6n%LsUy_lyW2yU;cm26mZ4b@QHcjMyifaQbPF zq4*3liF@fBz58Y?B5*>H{q6IDZAzB|G_bIav)Sf% z%oVL6Y~C$+OgC6N>q`l9?XE$jnyx!Vh6p`TQ6YkJ)dlrO82z?WFas*CIzhCrmizsi z*F~{Y`&gq8UJ@PONmLaaf#b}Q{aSZe$H}sf`*ORD?w_F?TFAeR))-=6I%U*}sw!EGLLOo?Z7LoJ_bhuZApj0ktNtx|%(sxib<^JF2fR z=(dx^pqh-tdksf@N!#7>GpFsQcwCCd;$Sx;_H>JTVx24n(r79lLf}UOWt^Z+*9V5L z43?eVubwFh___E6exxpB-f&Gf-lCIXf=D)JH5n>za_XZ8Q9^Fl*ue-B6RRWXjhD}( zJZsVVCSoqC`4hPnzX>kC*}OEqx^37a$f&L;c%|lwLqS^nXrTfqWP29?0fbwnFQpXp zKGHzoz5WL`IH7Mk=^}^=jsaOZYOHm}O?C~h7nvc9mNH&DhmIc~STiYvZ$EKiXTAEC z79m{vH{2scfV~QzpLqwNvwsq}i`9x{n518Ah(vfio|e`o_d-?~v}lgjo%M_}RkH@J z;o}3b`s9dy9XF64HM|5@XjS}^^Z3*G!#kj>xFBtlFvh3y*QUyHob1B~8ZuX3??wrq z4e(@<+(w0EHzYkcrOKu6>5+0EL!i0ErQOXjp)9F7uA_gTbu+8eiWP+WK>lJQqJ(YK zbMDjB4Tl7pcBgU-Oqz*uA^n*YKil^kj?8VfrExK#GZwVOu>dI4Eb*{v^y~fx|M;rUqDF5TCHw-bPSJUw*7TUQ*gC6#|s?7 zolU%k=P8f6t6zVRA3Wk072d16OczKQt5&8%OO?_9?C$EvyD?E%Y>PiB2fz{7eU`}l z2&fBSJU})o0%oy=&!e0qut+7_LZdMtfAu-o zFMJEjHy~_B<@p{s2ANT|-mkA4rniL)^Tk@K21m&zrVeLC@bZ>yar9p*<~Vf^jfR3e zb@o3#>$(`7fAjD*WWM~8R9#Y2TDrVi07tl{eVJ60-HTux-_bQwwPkD9mc^>u5<%3w zJrMpS$i9GAJvf56Vc9N>Pd%z)>u$$hz)iWRJv1T60a-mcv*usm*OrZ5t^Jg4`o8Zs zw4Ibn0;mSWUSX&RFba0cr985gdb+h?)zq;=l6a}HwxmpBl+>b>5WQiZBKwc>yiQd= zLEoA2SS{DA_DF0zG2lkh`D);8pip>pIj2osGQCD0d!i{n`$%_S`cSib`%A9a`j(hP zKk?;e*!WWYQIr~^i+Y2qd^V#i>r+rawk97mYgXrYK2Q*v{YwvTjkz(=&{?e z-2D&BX8CN`eENbgcpRD8YyIIwY2PtzV@&%+cq~&Ip_d)iyoImHt zSkj{9`^n=7PjNO~Qq}}z^AV1b`FbZ4Xm;d0xAMjLN+syNq&FCiXByT@7&#u4D$*?Q zhk&JWyz;lGex^qhQ}!F@L0x45xR{i_Q-G7diZYP!E-l=Htp2S*4w2WgRuK{7; zT;QOTz~#(L`@sCOsmaxrRjD9xbn0?wy!q4`Nzg-RnV218?`>8l<_+Gn)@*j!DNTl* zc%_JiHzJ`0+9r%~4fjbE6aFvGzYiUld6bheARY%dynv4yMsWIEv?Hk0gzp3_K|M^W|{S!k|j= z$T*_sDf|aGBOxLQw$UhrI_o<0?y@`1e;jTw`T+M0fBc|hY0t?K!fKpXH<1p)?8pe zpl6}R*i4xQ*#4Qwt{`qx@6@yLy}b^g5%pK|+in`Da(?<`@}_Dgu(q11un4!x8Z$I> z-y|)7GoJfx-X_ZGGopsTlv4ya8@z^3LpCr7RBV*tOwxW56v=6(WZwSy^NW8z)WHI> z$MK;pA}7h-p>p{HE%a+a(;}JireVzTUnJ71B~0%)ZbXpPzYlJE8SPwIwU97^)tJ<3 z`mjN~BA=vweN5M_`WVJAV+o;&z`3_WthxI4A#M77L>D8IR*-OsK{sA95valpMm`TM zI6ah!$MC&GD2HeO$Y@}IpsPldsIS;j@?9)+RpoBPAce?g4te8xIw+;FUD}WB`u$@+ zI#%34Fb?IfqR>#(jBiKAeaI-UyU~G08ZHu9eF*%HsHKbAkGW zKk4?!L2v0WdrkYzoce4^9EZ$l%7Kom-g`7+$UhO>O+55Jw3W@l3rN3-vUmJ*UN!E{ zDkg&ugDz`$0cM_eM#M3T&98uacjrU_(dtWGpMA+CE#0R~h<5e71YW3Uj z6UTNUYCk3dDhBxWq!ZV9 zXx#uSiS>?5lq7Bqy;8{|ELm)vGhbueStTeQkWhjbC8!~$t`|Z{^{Lc0q6e*as|-i@ z?@>m11UkTDtJ};an7r@HOW^n9D_Sy@?VHN_hUbG5X z{^AlNcaR|nbLseEqwD*CRc@{KJ3R(kPZS6+_URD+1`JJ^(B5hpopAD!Pps$$c}vMk z6tv%*uBb=O&fL9_Cxck+cbY{(&SUtE2Zdgod`%izJlR-NclQb$d#)YrvPJ=|yQw9; zB#Y@VIo4~Qu>v59$hdosb256TLY#FT%pGWWT$IauGv{jrnrC2f$M{K#+qv)yIFo+u zCx38!82rq(s=&gS0O;8g9(VC|9)W49pKm&~y8sjE|n^&E`Q&i;?ZWYImy0bRQ^GCXHL_7Niaj)!5Hs{2{gl zba$u;tSlTn)}m2DHJ zME{QkQ0$-9o1pBu_$UP?sZk?@+zvbrN`$36>#Jt68-~)nMht@GraLvum_r_CB+V_) z{I;^*5aw*+a<=X7N3F}5mn__}s^cY?tDJ`%Vlb08opw5Pc21Ma)Qv?iQ}CMJmq_Js zVt7Q>1*9;&@^A_Y(DPc9Pgw9lwBu)AiKa4$8h{c_V9wae-#}8*&)E|Bu2A%mu9StT@E2{@{VV@X&IL zzK8R=_ogL#lzn=~>IxX{p1{Nugz)FKxqd&q62k~>+8$>sOr4|`4bFFLcC@QH%;gl> znFV`%yQ}USRv)E&QnH@6jq1ROltTs)Su3CZ(<5cB0czMokm;AggdgGMdS|5%4uFxI zG=O$O$c_p;M@oeNY$jlqI`1SOPM#me?-n~+zH1Zjk``HHa1YGGWnQ%w00AR63{V?} z$7*JSWafjj>HOp2*%hVMg#M5NP57X115OM^aZBxF(;L zeekbev)`|Pw3f*D`W}m?Er0-S=s;d*i_!M-PfC1QF+OA$Q$kc)TpREfdZ z_=%)s7C!#n+G?zAJQ01E@LM%{*Oebr(Mak3szFNg3&i|L3)W}_bgsG8>`FM#mqmHr zYhr=ulYPNiFULix`MN|%|7`auNsuaqaihkoHJ}&0#FT;_ZR9FZK(yywo?&sT*UvUh zZ}Y_7^sGHCnU={rZ?nFhaj#eVYSEn|!>ql@mcqerg;4Vb15n6c+GQU_jW>!^IIdHs z-S_SVUZKhNd6t`}4Ie(F$Zi#ok;kqoG{L=TU~;1+2Vbu+qi&ETdGaqWkR*Pb!m(soI0!bK}z~#4J%pqIV;P(?OxlFuerW`*QzC?2T^bQS>7;{a_1;75tet1C=i!jh!GbuFGyVqnLrD&jXO&8Mif1jl zzts-CjISBaPRM`%My4=@5Mgj?0)2BFI&u!d?;wW$#~Tt3SKSLe)qt{SV2pTJ@Q&}t zdqG|92(CRJBw(JzBtZHxji8iX3nczrjQW1h;^84zDngD<$GV1cbEsEv0ocEf-zMBjf|3j9vM3*xnw^UfpuLW2@pf`k9NqXjM9p1-fws+fLjGB=&_{vqhwbH=zIRJ_LL`5|?SMzGXtUdZjk zBa4I|8YFDzK_a{}jB?F(kSo_k%NSD&9+uYXD@JNE=?TWEK1C?fpD)_K*%+Ek`0M;6_%YRq7~{S{X;Lj0kP(L4bbT8(^-E2Pd@&xnA(xcD-+o;I-zHq@4u zYPdxUA3lUGZ)n?hW31spK(5l)gZ(G#pJr9M?rP ziJPkvK{se`bD9UV!XPWNvZyURN*XU2MyK% zO9x5(9@r{tP??S@6-%d>h|LN*5?`7rPJXy3qeQfPb^!2>8g%tT-|Kx(dH7``Gd>)B zLb&W2sx%l>fHNt9{|RF9Ms6z{9m%MB8u}jjX{~676^KM(oF`vv@^QIIAdMCgz+~54 z$>43C{=10umIj(~(g_Y0i$Ux_{=%57JcA!?{0hz$#+TcA^^YoCHtb^#5rSlp69r8F zc+*WmMzEZw>$vleO0}J7>Ba}!=|w-@XMG~Q$=oky0xp=yh9a;a)^!e>jc}>#3_GMq zwG#J&x-Bb`d|rz35j{hJh!@^{kj#keg2IrH2w%fUmuin_ zgcXn8@^Z^P8aWuG$}~LqV28r=wP_Iz%zp^7e!4j_zoty9Q{x}Lt&vsxE}J(zkLIc` ziJAg8z>#L;O)a;WFW)LyFdu2DKyfQB?|$C@bEeXbO3?TsPw5^Oc6 zt?+!CK}I>Xqk?Z3IcXB5icvQZE}TQH8spdP(#Z3wt@3B6>;DU-&Kk-Xb_lbU{f;9L5$n8H^u_bnC2SNmVi=76{=4_^7zJP2@tDkG(I2 zb&H7KzJi)rHaUt6y?HYGC8*rAsACDXG z1x}-2y}lQPAE)WSQR(CTZt-mMk3Q!yLBa7aY#D?%!>#AS;$nC4loq?#@O|oGbU%_N zE-zI&FK-mreiL>TxLh8}=?-5jOdsAI{MpQ`YCC*8>>2J8=O-afT{U)pp*o!%lU4cQ zqNQsBrfWhhmVT?K7xf!vypwP-v-D-}?_c6AoJ98)#*-gq=f++M_Ux{T)6QpqM-B?< z42DILCX#N3h33*tTpHm+OCh zSKgqil>u#V{O#k>bh7FS!r~JgMERclnlQ{JBA65I90#7e=LD~dEADXRcI=?tIvd%s zT13SC0AJ(jii%^*2MzJ7-jP374j8}xQt8veN zRX-g6PWf_ps84@5%7xo=mh$Hz9BC^Mx%@+l+f`6c7PF!q;D5Yp197j4`yMv?YtNvv z1FO>zgDLc(o}K$x&nPF+2CFn+*!{V);IHkGSLb6$#W(e&z^XXp{v}@VA0d(G>Lkie zvme64E?%4;w8g|@cbqt66zx@vPeY$5UxryzT7^Fs5c&K$xspongIVCYU(g02<~0TM z1=^4NflzU*$nO}w$OQjVF?H^xCuYykT_cJ{Iy-Ak$<$IW8C6h7)$NYm;1$F6Dojag713{$J#5yNNV5fnh zb{i7^E^NrAl^YPAbCw|NUJ`gt)U)j%Ag@zK0X{v5OmOUHiu_uSK!OCPgJOb;8EI^L zg7;c6!a9aYoX1mV zACjQ%PTn+{=I4dtq+b)FSb^Yw52h-Xvn6H$AEhwef+U6$Eu7L>kSg{kvPKROQ>r|q&4^Nai~EA{kmropyb>UEbAOru&ghH|#D zuBgoHq^^M$d4rxcgYG$do09(;&u-42aN)FAJR3}y;cqa)7a|WROp1w>Ir?w}&?AJg zy{(;;}qemZIvBI;U2+isa`d=}N1{;U@U;Fo~L|`&ztVfbohvrB0zlzzw zZl(3-B3Aiq;Es@$qSeI&!n-`YA8WDW8BrqOnnsACBqPYhitF(jyfxgr{J-9J z2VsjKb9nJEJ7iYKo4A9{K%Tc7IPzk2@H<0jW>aJY=R0)Ld~tM6@}t zA#AE?w_+jgwRf;pm=HXy14I1ZQ(f$e%o!>he)+oU8<<(g0>K#91!jyzIx{T1af49*r6dcTem4{zZ zoAGuGns@~l`-|JrO*?xUW)ax1E@GEoGf#2OWXU{01osNtSf>^sXVd0UIJIjY_&g&} zX8RD~8zTR2b>oq7*e5h~v}rWdOjg_OypJ~pCEdX|qRFBor9bvUczJp0ojUJ!&w=|= z*^0|BxsXf=JjV#e&Q7HuvaPMwDE;@*SuT5xp>TOjC43sh|5l8EP+~7 zMOU>-3bnqutgjMpnZ^X>GC)M=1Q`Ad9jaU#ufkke}*6jyhZ`0j4}bA8pjx^l1)G(pjh35@WNdl^vgzju%8)00{TS7Xad&4(qEawqGfMi zVU+j%vA71hkV^*_Lqp`FD3TP4B(aS*56AC8Au;y~W!P1O6O(yYV}_UR6lZT?3#z~6 z;qeJCZ0oQ3h+$27|IXr`CPb~KUA+8s?Z@AMuIay$4to+e;o)E`Gjo6EeHO$k0v7RW zaSdtC!~kKRlaDstZ1>@k1G%TmP3*NW=0Psync20pk=b6_(b*zu!d{ClR<1WguIB~| z{nX^1xjKQr+C{hcw`8j>iG!)>>5u9>X9?KJ^tPojkH@*cd1amf%QX*tBJ=C%`b!ER zh0ZEkhO>O733T$fSk?25R{)y%+%6fWF08?8C$4f1b4&+iZA*`TApA7)^z_O@t;Ko% zMqboT60ZYS^VS`w#IY`O+|%i%(SFwMtSG1c|bq zS4nw!t1lhf;Su$iJtFIfox?A&e8+1h&%Pk*+8(taOJuAQQx%v(!n%ZfF7{oqNzd8a z>em8%mFtar9v3cVc>toK*X(x#HFOg>&4m<9~r@+AIKtNYsh~Ou43ke zb#s1R0)rcF!7ETw>k>G%tYZVMTk<9~xqe!%Jo8EA z+4dJQGLBh>K*>*9LacqBZJEdwOJz+zu}clcc*&7%p>vW=$(d66DS}G?1fP=U21@`$ z=OXTLf!;UzL>uvr0G>Y8i!E-BW)nUQs5oc$XSE-Ypff1PuJ-08hWAL0hJNQI`z?F9 z(Q7`3tZw#oNkUcNEXKguT8rp%0GkH%j(9}?{A;xn73BSJ?J#8)Cu+&?yW^m|^AvXZ z#cy2bu+kb(x^P__3w@{>@q50rVpWVpy05LxZJhuTi>`(?H?Z2l^R8CW&@vc3(B~ywWkBwN@CS?P8a8281}3guLcY zRxNvK#;}OsFEW^42@Zr3D^6F8%=^@`(4~mnOcp+DTwZmNz8qMp345NrovZBWxIbW- zI@>HG1+lch?WZz(fE580z$YGa6GV0Qg`YqcTl6Yl;v$|}x)3ne zvGqOx6hpCq3d93UJ)tMRjOV|FmzGshQ1zF*E+#YP_w20PX=j^uzQt_$)b)3d(ii&C zHK#h93l%*}CQl#@bmIE-v}L9>)hIBBV$}o+qA%2T&wENR43?W)u)#1n^==oJh%xz>B zoiCOb-CdS|$fn?XGB++ww%co*)8=gYUCoyP%S>AG99ZZdQHa=Br~lK; z7C6ESTlw*|Z1$W4N6u}#Czzzp2U?(h*jNusOL{u?W1Gdw;7LBdeze;D-Qi|2&l=rc z4dD==LmoB9n#@+V>K#$p-8{sqiWMJjTJ*IJVwfm8BK4B--Mu7jeZ}_-3k#cN)u#}{ z6~k`CZ5^9=yvH&s{(gc5Y3oW>T-XRkx~g+f#h^ps(h8wuD< z;O2O3DH2q1tcu00*cpg*2i}5mKHKXHmHgypUye2EAGI&HPf4AoXs|R`C8{#)7^$jQ zM)=HSO-uPPtF19aZfPDlK)B`N_-LK(NBG(xQ`Y^hg!iPp^J%u&#cAFA6&JZv^i<|A z>J>yRzkI>&54f{~e^{=v;2R3!`hV2AY%!(|-0&A}NEO9}x;ee1D}4I1BDiGvol$rU z&7OeFsl$cXIo^oxQcv2T^ysl$%0`1ATuo-bg9}z8L)*|CSh8f zSnu=~X894FDq0(&nre>EqT1`aTB@4$mVm+U5!CAbhpgjrT$m5%N8Nx^QBU%1y>L&N z|HE-rE&Rsz#weYr{>k*n+pTtSP`~HeVnI-@Yf^A}Osl18L(rIK5kT*S-Ii+v3Reyz zHDg-7_LdJ38*e?kzuk@tS;`jK^9` z>ATg$tI}^$yGlgHBUmc*u+xv8r=w$xoW^mw+-1FXs)N|amR`?&h#D0>Ruf11xYdSi zzyy3q+rE;!Dvvw|t9i+Ht+jeY!)oTQP@XcmgqQu%e~V|){4*zS1*mp#dc&p6LTnwL z-hAuHel{DLu6|wDe>xyFc!ups+_}^(;Jk7^_$?03Pbq`&4oIVPVOK@lwsNJ6HK?X5 zXbwA1u^=W)3t-lZyrK(##J@j#*X@!X1gorLP+Fvii=aFMECSvsBY=@GCNV_5s9k*f z`n9$sY~CKEV}W+%01)57V7IP-CsRiGrYq29{>!)La zFJyvJu|<>HEpZnzoABeQ>_%+)!4+A1<^?)oXGJ~6G=|uu z_f{mM93Dfqg?F;d&5GNPJE9yC1J_}CHLA)#8ttI30KugimdbB$tp9Dj&uX%83{aw= z3hZ3eIC66;NZhQnxD^2_zDSw9L#6)VJ^@}&SIuuHA-sPAovm2|iam-{FCm=TFfs!3 zQEvmGsf)FIYdGGpKHHGI78WKl4gxX;zWE0lmOYdg_o;yO#;i|S_1o;e0Mx&)j_s#2 zdv7rr03|0cWhJugHeduumk|_>aRf%X(hdmqV;ahX8xd@2Op)evfQ^Qp5U^%uw%{Y1 zrM_LO8m+!XJ$>p5PS_$G`nlBLB>VdHYZ9{25g!|4(KR7=3yYH9E(V|3)l90B_2E|^ zS3PfJu*GikcVLOiVy1px2BUT$`P=29LFOsoRPasm5pb-CbS_@4w<+2|fNB{UQsj8= zekK#ARVt_|Fay9~2K^tT4&SlQvV+LWtj(jJp)tk<-WS7*bMx=f%fZe72BkYp&*l94 z-8|9IFL*Mq8sI8>V01-%&-fJFp0LbmHlWn#`hW(qXu7}p8H$cLx6d*}0RrL@Vu-Mu zi)x7G3xIW^)=xRAkbp9aGbDnp#ls^m z70|IgyzfC^N_VVDqbvH)Nbf&)_M%j1PEX%=>mX zdkhm6Mmr6K1M@zNG7`$ZGcX_*J?l1V&<@pIQe@0A=N^AgQb{yK{8&uvd2eM5gL(+ zH1a#Am-AJ|jLJPhL^ph=htI+72>rs2EpLld0LW3T-yhCU@u7^2vUlN&KHr*UCTLj# zo`}3&RYotVDY_<)x}*l~Q?i*ZNmd0L5`aT`{`)0RgYJ0EStI+jcban45`oB{Sk;;!t#*B2ua?SSu%ZYHjOH(`a)cf$_7 z{0$(cr!-)v8c*!E$?OLLQRAIu1%0w?3Ht0}qGgPLG#dzMB3A zuX;&S&8J$e@O6MM0`6sI$B9|F;ZGbi3q>p)wM)y zD1JFsw}tv>btZcP99j{7CrCcl3{w2Q_B6+6`TPTGl95j@KJ-sN2O?wGq{ym@S|l;}t8 z-iC&N&8_s=yb9Y%O9E`IP2qiWN^WG9mq)UbX7-qQP31o-%VpR9tAkqK)N|xw&<7{EE9E1t3PoZ`d>V(Q`Z#Dky{XWzeEvT|gx>6y-p`dgRZV_OVEHDmt`Ol4hTzG6ocb7CRx`rfIQvSJF1@0xoJE3ST?RN8YVcV>yl;o8q;>FtSpKG-OC!!Qnr^VWqDLHR?cnv12#sYYX@*=pmDLvmg_dy>4 zvr3+5-@<848Zkzu=a;)Y;n~tywCNVUfakkC^B&+*TUT^Bo<$P~KNyFLX~_^a`Z+yKtn4U7$oM-lUCn2B6f*u36-?Y6@Oq=Y_j09vG(uw-rts<-r#3t1 zJ&XCh6~p+3!)%7;qEwNc}zZD?reH~K5?-b5CV*WV!}zn^7}yAbv`V44Jx@3dL|Lepg; zGXKZv87AyJ+vH@Fl&8k<;Y5TY_42IB#>+XC?3Tmlif9f=`ml0Qqo{4&X0Pk0>pk>74NRf^T_92L}S4sW~< z_D{ReneMd()KJ7x2tE^^jVmyWA&W|?-?wUisZi3>jsj- zu~CLwaAT#L#e*d{L##5W1M{!XTcqYUddh4D&~SRczJ34R(T42l^=mA5u5?K}4}=}# z<4ybY&ED|QJhG)XYfp%%@mILWT}?bKjFR;Sz|F$F$#aO=XSm< z2N|BObs*~L*XN7Y{XMtP7-Y=LPU2>|_nd@(LB=90me;Wb@D0piOfgc(i+6vwE5#gR zYV_IP?!;if9ru7dmyr}nvWy~CqT~b@_`fE)ksxPh<=CO3!+F4zF%gJO*5pz-Jzl0V zctwXIj$%Ulkgw3Mruow#x-?Wk4q9cAp(yOL@bzb6?}v>ghlr_Ft*2>mtH=iVxZDv! zD5?XK5Qs}CNSX-F0MbjpoaF-^-y1(>o zctrkSyzLdr!AE_{(GNbn$9mk)Ftl7R>P3jHr1TZ1yqHrQc+-cAB51+ormIK5IW%lJ z!2PWLhD=j)FK(h}Jeu|bs$_bxOQ&h+B0$Q${WA)#3Ik`X9`HY7L=QDGQ>Ps`|9LmN zaoNp%{>wZSKbhpQ7n!B*c|}{v+Gee!T5oxJm)GPqbz#w_9u2 zA?66Rk;=Bfs|Tox#~;^V)l#)27*Sv|a5sxut}(N!+jZw*d1qx8m|E$2w|$8+4}^%& zk!ux#N$B12gc#)E(kX_&B$x!v&!|GgkRKAFXL5?2@2$H2$cZf)qmAl1E96AVNF7$c z={{i|(FOE0$m&^L_j?}S|H_poZJkk)#pjJw>Z%W2Xy~^51WnkKUNw<+d#gsh3IyS| zzGLU*hyZcv;8s*t;^Qcc+h)`h7)K*ocKzw$mAW7YFSMO@7J2wt#wP!AC4tkcuI13# zL2BATlAuysZu~RqPz-kkLmFAGkR%W4k!(2GfN9g@2FkgHZNyp3qg8^gNz*C&-z@IOevvY`qwHKDRTFmIV;>vjl)l z)6E6^)3P#eq1IkwQ)ojX6Y=U>+n?8p6)Rv#4O|J}Q&9MjHP=~ot;qE%JmL@L>l&R=HZTUEqT<5BLZx&dt z*abpa{L^Z$mu#aeWcNanR8=eqn0NvdqRz2)EAwra;Xnxk3Nyu1&xfwdwkFbv0f#N6%4Tmr8&jO0Cp z9=PyVv~vAQ;>4q?N#b>*7p|$9QD8DH3Gvu9NLF=azqn;J5T%(@p*SQ-Ma?7R@zn#_ zg~Ce&-LM7th|WyY90`&$u}+(an8o+w1_cfR(0PHR6V8kd;r1XUa06;UhE?B=S;(Zmla|xy2Vn_K%hzNgY3p#Hahe6D+ei zuQh;+3Ovkc`s@r!%m_1c=^8h`9DY0|h2&Zqx)j!dx6lwok+$p5Q^rZ)+i15Xt;+>_anLOq*%G1N8 zg?(9{!3u-x5E2iYL92?NN1cOt6dV$cwyDG)kEtjN6uZpPA{h~?>dRT zClV}wzeBM)=|UAsLOqlAuSwT@p27mDL-=%9b-r#XAV36%8q-)$5+(qYOo^{Ly|f`N zjsAxRRs-AQEFiswlg1|K_}J2(Q+a#oo&Te~y=lr^Xkt3o&y_#Owvs(1<+YsfE+u=O z3h1MF&kX?Hm*e^497Js^}^hPz^7(dMCMF2 z0n@Yh9q3rnJJhHhuHF4xZEUF#j@XlJoD2m&3TW}yPgJ+%9>!dIiyJcp&nT-q?PkUn zCc-}VHTJoyTrk`UH<_W&?&R|C{Fo@Bb|K}Ct<$JaY5*zs%&3byj0c_^k!Bk|fwBxs z{S#)h#WY7C#~bz$@RpW{@!caoKWSiLsA!M;@h0#+NR6zXp5)NcCn92syY|}4@%-g| zC3yU7N{~URV`y4BPBkRR2_+UYs1A4%VzoPq@pHBDu&9lZ%mu<2Gg=e@bOLCXPHFy? z_C3LOLVxA&-4B5@SwL}|)J z*|DhV#o@!4$A{dyWOE@QII-ZZ6-~&_w`kf#B=kj{-##%!U{47!G+!jR5}U@`M;mW3 zT}%-g<3uNJ2EnL91=Lq@Uki*W0G074auOxh3 z=VqrIzxj!Ut^=ETGT1m=L?ix&JB)1ukOBmgP$q<5i=Pt9Hy@;k?s;-&UEy7)uWfwZ z&Q7tO?}>1Hfl$-mawVfWZ7CLTF^K(`Qdm4#3%sN$bxJQ0bwL(Bd7{jyF-o8 z33$6H;i$rR!(j?)v;h~xf+QRQWf4IMy4+MCbh6{rb-GUSi#(P~n!xI>9e?NK?o8f& z_%Ny!dWv4VizK$LpZ}_RW#GUw)W+!ynDuf z6ViJMGQOf+!YlJP5<7nPeolG$NKiQ(+7Mc`8o-Q~AsLGnYVS{`8ZXyUB$q?o9ds#N zi=+ziH1*#;gbfK_#6emOtkuSKMqo4SSF)*kaBNUjNHWB;1_Ov)4eEH;_T<2NogkHy zD{Y=mb+L{3I;L8|j_@nnUU@qvd~wc%0%z2l67N|FDm56Qgjh4VLKpoq>%RRE((MR$-P8zL%VtU+c4Fd&lNZ5f(dqZuwv$z4AMLD4NG+@kcDWKBdh=$tQ2*FGoUV zkP(6OCrpZGwoc&FvY;~j+|EnY zQBfC!P**FL78qJz#EO1{wqJ!99Q4ZVKd4y^^AjLKWeS=LB`g|n1dtcp5_$8> zG@R=ja46G9sIrD16TH<1I&Zh4EvCBX>2%dED0r;ny?%YN+F3_l0_A-JY>)Y!UB7<9 zXsMbXdQUnm>`#ZPqo^!oehoYtN1|6s%E)H5wdw$#GWr}V_q^uqPGm3m?ilPkQ1|J0 zs7(ux5HK9nIBTk`RPiTS=ij=Qcqrtlp)%$CSW~DKpa%75OffqydEOrQ($Fa+0S$Lm zM5Z!h%&4QGnb*gRIpw~yV_21K1^7;buF0%3Y2^PLXbAwV3*G&@9-oZN0!D>px>N7> zrY(IhJi3h!<{NmJF`WAe(+r=+)*JGk>{;t}92&LF0PKWMo1&;Ev=aDY1f$FHcXK~2@6zTuS(=4=4}Q?N0Vdic5N&=7GLLs1pj z*jKtO4pVpYLm^apOvZcGWBG1p9wiuFyK3vJY~rNJBEcV+ym~_SZf!IiFLz7iklQ+3 z(;6=>p`IAyQ0671K{F8hM6851j4%)(u&r^-sm>J9a(j0~vW7?gz`$V9bz@rJ4Q&{F z9Qn8rBD*|8m^~uwr_@o&5h-DKdpw>Azkr`gc&oJ1;hUp&21*FfQW;l}CwHEe|2|c+ zuR5}$2RYuH=i9*%I9qcAt*QlPd0h)m9XhoaD#~KLo0FH|y~4zr?K7R|OI0Mtqp3Xp z$9aXJx~#g`&XG_h_uSvkB!FMFKFK9ZtVQ|}NSjC^=FRdjQ=4s)fMg#=cknOUCZ9{j~{p;vBw~LeUUk<1Fcvcf4_AHoC(+eh=JPNpM z)Mt@5=1lb;r8u#lThd;Gkj9@7_6xcQ(I+LycIpg-+4IJcD>~hwL`@>cPt_kYa#KzJ z^aAW)Y%sEU5A$r?WiEPPerGpzBvpq=SIe8&FRb_Mu><23bDxSwuO0j-th#bS@a(W8 ziGxV^ISSs23{eNBOi)@RGx5Z6Y*|WWd+y#KpM|~Y9xEcAjrgKdOxyL0LE84wYi_bO z=~0v{m-4t#X`1{5-EBi-=}N=Aj04eQo$PBnrIG>Dlg7;N5)lzpvfB+83EKG7mM_-} zP_1%;gDlG)bt=qKK_z6iDRE+r+HH~vrC+w|eU&A}R>7;qa}>53RJp5{wUGvrTqmz? z-pA8#h-U|Qv7Qxq+0eC0r8q4eo4&iU&!MF+O_bwTE!UfL!}nkj+=BsBy<6 zQ6J&tY#gy(>^WSX0wQqj*D(CL zYW%7_&ktpAU%3A7IP+o=v7I3$hrL^cLvM=3-^PO@wrUYH4tKowq;Nmt?jk)yRU62T z_~E3P@MVx`ZD;$(A_hbYx8@eXJDDM^&Qv3XkoFPdU&;*uO9A7J0h5r0d(HfA&8Vlw8P~J)hrD5LXaAB*AegRwq%- zfoX4;vXp6*nlb-fvz!1Go$)vAhnqI~udUUHa?K6Yanw2)O5X{*k9wx~93$Uck819o z%t-wjJ4JdS_4BXZ;+fhTB1gb|?}}JPRYt_8Dc}+%Nf_s^^l^7k0WZw<-*TX07bs#0 z$-@Q&?lHa(2g}pkBo4y$lZ=1`37_Itpn0qNi=R*SEBU+QhPb_xy1328>eI3FO2L8aJ==^LD(foUBK zW-VnK_+*ixzDL+unF>yO1c%1rpVY~#e54nPB_7Pr_LT-z+~7Hb(#9mkQDnQJW%tNZ_fRU5a|OJc9XM z<^kXW=%V=B<0VBKtX=$B>Y@A$9A4@cM)UM;d*>>bC}I%6MN=S@atH< zaS#C)xVxO_Cj9n0ht=l!O(fI*QQrLjwROM7bkTpc5V2}{_NAtqzAbg9)>61Rwfu}U zme!=Q2ifXJPEc=R`ps7t@%mD_ka%fs0=P+O(`U4^zTF}WBEa|i`E|3BKOV)uCj%J^ z8Ax}QY+)XHK;m4Zv(~*8!+MP_VZx5^31imFZ*!Y@8=#LpHNGQ5He-!=C5fWId4wWC_Ftl|-*14rDGS8O^gQO})gygh>U}3x}MI~ak(ivl*rOpa#%(=n3UoI?NQT?@%8)yGQX~eYr*?GE95V}3Yj$rGKk@#$3_CJ>2YU_nIfdw{3LBI z)jezF__$NEUl@+8ms9n#&fD5cr8#tUDF6I|lO*}*q`%RK;ezOJ6u>PjmD#_q%$7qTjwq)GSv)>JVw8v_mklfdQ+m7p1lPyZ&GPOv= zmW|K;&gGQrT~AALF`fZCyplRW?!V{Prl@QF_RVy>kR=N4bq_>xn5i%kF_K+9;N_v^T~k}Y zQ#AJ}KX+F~%U{En*0zJWs;^Er?*0#RRR<*@pyVLg+g5a!D<-xTLS3cYxTz9r7&Tww zs{rCJxS616g>^Taz-G7lkfiL zCkPj=02Le(0`pFyEg>8crExInD}UWqU9lC9+preFf>o>Y$+;uLRMsp@F4RNrW%T<7 zXLT;592d8$PsTn5#iB4^A4LE@7D~JE&yPe9$VjDHV}flf;}t${CQ1u6(Q37yj#(ih zJFR9?4YUr(rw;@w8G=@7a?_=NRT31LWCzNMa)`2%SL$X4ouPcza zG!#sAN>L=uRP>s&S@aWOF|4`vRZ{$1RTn<(|8GG58CM7*!Wf4skKB^^Sjn^qZ$8RA zjud>7rePv%S|Em_btrE{7Ev4W$oS0P8qAqW$(Gs71_V>Y)nY)v=g+bQ!fjq zob57q!xf73f@WrBCR$=gx-7MYGCLjzDO~uYWH*SI@!AlPes9BSGTPNQRWz;8vYIfQ zW`nlU;$QYNt^ERa5Ag4&qCfrTL3&i()@Vo(`_9p)sNXs_woOHy1OJ*$qTSEabSqt4 zCL43TsZdpX@+cH^PPGXum!ViJmlKa*4MHbALWEbqx4ju7HEHxCiv4tyQyEG zHX!YHsWkG9xrTWNQ%z#aIEGjHx!)QTB^h3g3)fvxMko7qwC~=TGV<5#tQQeE`8!u` z`dyap@4u0H&#DFJP!G+DROh~n*++aB{?Am@C<4=BUs)V^>r#@h5`Q{Ljx~5_NHKwp zq%8gDr|_XRS~FXWNwwynn2KGYLU}T#ZL{}z6TnpyM}Yo*i)}1(8h58mPMmEEFIXOP zmv*|wENy7tjg}Z@R6+cT1$8_HO(BJ@#Kt;f@~zJ}O<5^J@`8k8wM@^+`yYm^eU>`J z?3MEoUy`x}+c3T_{J%EkhokHdMP1p*ITK|NQBq>x<^$Y6gXr-a zywA6L$LFKPIb1)+-cEOpzD(%vwnc*@MD_($Ca51R?2q|EEYH3?S>ZIsn=+}8pU)^H zRrLz;H8dfK3T|9%Xfe7ENBr<;6^kuy;ULZmLhoOhyshE0_*k=AZr#)ihU$<1-KqA0 zoN3{ICKldT>6H+WM~tg+!j4u1NdSJ}*Uwf!4&@71aR{qo&b>&J;&8f7rVwIP&LdM7 zv_wLNio-nF?9ZZE<{Q&yrSX~b*`2pUgs%KdItsx8#7Tl4CvSSy-$-(QmAcBrj-^Xv zlYaZ#UiR6&+Sxn^5xp#V0qD21s=Mz|jXZQ^e}POjd4&Dr(^rMNmjA3z4q=3g&ao9% zqFlW?OA-6^PJ<>^eZFwOC4LzF`3(%Cj>U%GRgzpN0ZFq9o|v9D;kV2M4Qk(v6Qd9w zCIp8fGVEG`D;1I*qkD!8mb>a1K7ep(ejKQek$g2+<3gP>rBzgK8CkNw`SV%Ak)e04 zO5Z~VO{)%|j5jPzhB<-^7w&!k{Ad5|KEfG#5KzEk|J!V4zgR2Fr!bz}c_bgq(Z*$& zqAU=cp(wN)UR6$ys75=e3+h4^<&q6#-n-?WpdAC zSf|M`2g}4^tz9>~as%W4qv|RcqUyRX-Q6+7&_j0#NOui6AP5W{BCV7(Gjt=}9nuPj zba$61EhQ2HA`;*DKCiyd_XlR~z2}^L*4}%qy%5A@uspwocmHDOcTa`jM>Ym>T_wSZ zgXL(eg^Gg?grr3*JOjIuLqmg?WP8q+J#rC^2wk;6jQVmg0C!Ujhp94&YS9!Uw-Yz9 z31n4~wDuK2>__$pYnzPHS~useOZ?~GyQLT{?-=eSt`FAyj%o#MS`2>$s7?l;9R}Ol z9%r@04aiBJBmIDvl-LOQwgZa!%7Le(@Elh>@W>!H=g;LbRdx~uHZ+kY(0FqN#K)D% z+rJXRqA)&Owb-HEIK=*br|5Xv(F0GdL89$Ip#RO}KZnH<%p}`I(6i!P_hH`F`r}(3 z!P$@&>sL39+`I~XjWSv=Bvx=%k4_cMqhk7`wF(2_UR8OsG3{0Me!EgUtph>+WR+Se z0R`?f>m0A5-u@D3@_qWK5)*MTcN^<=Rm#E75gfYY-X{PZcR;k2$NWOrpHIDkr8tHu zBS9V*gL-t^URRi;WKrIEKFBrojBPk*MaT!66XZVp5p z4YL#?8Sch7io$uuFt^P|qaR6u)(c0cpYUYZiUmcMwYuSHwe8w{1OFiTFH)djK)IL_ zXHf8f@Yx}Xzq9Zh`Ejl6=5U{ZZawa9r4sFc`Lrl9IK%$yFYMU|_Dd>-ATZGO><K+y&ggmZA?lWe{z;Hdl_Upln-!r1 zv<(Ul72v?|vf2WplT>onTJp$3#oyt9EI#p$3~?@&UR>Km5M_g`3O;%{MC01U9lOi@ zSx5xT5X71u+Meuz4_zI9EHNKt`BD>j%%Najs4iKdy+bWvVIp=|o1I7$SyCaor@G-U zBq>P|=`E+wIc(`ypy?O-x%Hxnf>C|AM(yen1B^a)NLKZwSo>T^tK784U|g3uR;L8HZd?U{Zp=l%iE^cITKwe&J zYhD3yL7|V?T7hnA)idtB~uEVh=nA|f(QhVkq2CSv}1qi*7T z0%R;q{h^=N!t1q-3C2FJ{q6KdF=DxwJEL%{@goAZL?xY4&q0PsFQs|Bl={Xp#tX7i zpSz!pVCJ&Lli3W4X6Q~r4Z2FomEv#*ZM?Z&f+Kz|Glj4%jY-=I!Waez2hRS3HUEK} zLJGmJ7#<8|R3~ic=)PxWM!zX_zdsi3el$M}?N?wD=c|#09)w^nx1CYeh;7Te!TBO9 zI8w1b@e>#3iZk;h7AV&0>2XU%ms)64#^j`s9**o$eSJck^FO!%2+0HnXJevS1q5iS z^^JSHV6XjJknJjYxr?Xg*!6~bSLOW6omAB_#_S6rwXikI0xLyKN{Ui_J4f(a7V5Gc zjkPk(3Hi!YGwcV32;4bwa>Wr4OS362eB*gpzV{(hr{{jBUDwaN2)5g}^mT>j`?i_Sh z*0!s%0CrPX(=*I%mYOBw{k{sO2k#`P$%CC~tgxUgIgfbi>)EuK<=G)c5}j#3H+mh` zr}0@vyx5Su^JaS$vN$2KxUg8?zc33BvcepU&aT~(#~g_&B;W&G5SF*vYfng0=G))1 zqVM;p+4D#)Csi3g9o^&?XSCpc&DL*Xl!au?Bw=c+S;(p3#3;;}#aXlm;!zU$c8(WU z`JNnAfqBE`YtJ9xmG6J^zz;-W5C?G*dwQv-5y95))3 ztZ~FX7pe=TwwPq?u2mb&Jl7u2Gj|Qt6RJJ=yRirE(e^ z8uDg%j2Ci=VH?$uVec`|cgX$eO~i1e>4bHXW8GE*&`z{U^}6zZE6vS?77k$XDZ(I& zPxCApPIc&zmb{vq-et$j%HE)>@?1n5=r}H%vu!+d6|aEs<*n&RJ%NM!)g`T zSP=NP%ti&=U^sLY(V^75${tvoOlcipllY;|w@2B(ZdF9`PiBuB6RZ~-JKwyC$ptBd zJdigl5qr4CY>{a6oraC`Uu6VKYw(;s?`#gr}V2!7n3%~)VTG|Ub1O~Xkh z{u#-Jjk$u}re*_cby}~uYigfUgch$U?nKo^ofX&-r)NfZZ7oya9t?}oT?>{kj9fA0 z&?UF{s*YFrLLY`uNHkAtnkI1&-hMxN5ktP;yM3P!gEcfXU=-MYq*?xQb9vO)gUJA( zzp95tu*;l9ZPxb@9A)0GERKDb`17ehC>5ZChKnTT_2JPj?KBNWMK*L76YWI}CCtuE zWsGdsTm5PA5j$85;1q(NN=7714RX3GNnaT8zbAYh6Ko#7dTcsz#T1yO{*j%Xy-%#` z=fvrV&MQGP_W^QsA4ZngvrA6h!QbA=t{rECrwCV0nOlTUEnc1PgmW*#{`MP7xiRB= z`hPx72)Z((2Ru@}8zfjIyIyUBDkm|SEL=@(YY<-(wUa0=48aX+$Y5ibu zy?^33y4)G)--_s|BSzt#!s-!B(9^qZfFWiI1$9CrbY}$&j^RoaXVI z9%af&dfkES?getEOzHt;B5hY-_ssAKxVhjkN@Vz^t_|nOVy@`|qZCA=D$J_$p@F$Z zD1kIO@6Vck_Or_n-=Dwk+JD!Ecm}ekr=gVLn2)b}HoH*?4RTVczA4jk*zZl|I<@_r ze9=j&Eq!U=jTrDPwSi2C#pgSsk+bm?qcd;ezuB?{k%J{^1C-}0Bl<6*&O$j~*g+z& zsaq5whpF$wNN)dFzaQLX0ixef8^@^7jKH=3UlM0B&DtOYEke zHkV8D{7#4taTn&~%`^W*GX8a}9mQgWl~c@J-gFi1RQ=)4w;qfF0{sc$b1$qvfgeLh z${9Y6kKkadTTFAKI}8J!Yf|{wj)QP`YS$5Se(gg*oBHw>-+~@~ajgWeakwRR&_8Ep zX5Jj&d(|Kb@SLG)gl0dF1=X!Aemnefe!NrV=qnTdF`}v__uZIKitya)laISoyLKKq zM_*I2m^GxeYmf&A)Eu};M_gBm*?(mgv98N}Yp2z)v%dO_kJ?-6e5~_PumZBH z@-RAY4y!ytc=5T4pLBfhMcBgHd%t4K1AWzeGQ^IBd6c7@NI>0djO|S6h#2Giz0dr_ zZz(=#*zz{5E6;rE?rr&(3C;- zyMF$S0c%Zju8Ajmen2A$=j3;!_!q5xbiF_rfaIJ1`me}GpANLWTXz~?eMMY`cQHs) zsBG2K`G6N|?qfMS!%YIx3?Iz}lwq-E%iqa-^J=0($cCgI9si8tUN3;AH+2R?SI6CK zz^k=6b;5TU2wzHi3PRLLrgLQyxCnQpK1jtA{yGnEr{6_t+*nTty0u0pkM&`nM&y}u zy+ARvt5g+CY{!fv*`KN3Tj~ON0uU3537Zqr(tzIcVctOwCpxdrNxd5*!>5r+9UdFO z>t0<}t9vEde=#oi4j9I42&OVeOr!S`())sNOT6yol>fj8$VXgZ3w+oy)ZU?PA+$1j zh|ols`trj?DW74HJ}dcgy~5*u?Bq*?Z@ONs?*8CtZy#1QnKQ$t!F|r2l*;9t%(-$hEEEv%P*C`k5tmw0q#6n9psF^nbi=kYCckObT{%#U%aT-Ybz6s;UJOv z9mDcY!`U4$wO~~nlSPO#MHNc>Ig-b&u#DY=k^lEKkR~qmb3}(gh0Z&b;9**3aep)6 z0wFjiM2wr)x2(EFWw`EcpQLy@PDJW&7i=|9IOnP){*{mc7po6pRsVT-t$+w=kug+w zW@LSv{)cWTYEtWARdp|6(6s_j!e-IKP2B?yCcsTLEDs@&s7H9l_nvvlb&4v?!)mj$#93IIBM@iGUhfSGB1QNeg2ZwpmFDUns*60 zH>5J_!>)k&usj?Ob(KIgarC$Ox}?+(#BHZgE6FxjV^06OTW}YF6w`Nq^{#6{J#Yh+ zVfwC-RbqB;0gS>*8n+a4A3`3h7Qcf|4OdT9!km)BiiIoXk_gQe5m;Eqi{*C1G^`IDM&r0rOWXCmxf4rCW z;oE)|Pu`l8*B2t}$e^cphsLniAHLd3R*!kfn^NWVibW_9HY~b5#mB3ZRh)eM5J0Cb zd9`d^&E)55o9DCY=mZKi<2Ose#Oh9Kyduhd)Ox%9_}=>EY)W1UOZQGaoIe2dEVw|< zr+%lxaW*{bD~JJlj)(@DQ6CZ3Cc{WQ;^)K6xDUY5ev-b^rJ=|7XKsVk_TdQ#*NaU= zBza9D_L&IcE=foPxb>0YpQ+=mOJS*mc91Ktr@n|7&L~0u5jaVQI~iz8|z~r9w>w3rWJEqYVkv z(d`sbe)V2KWG@c_sCg~3)fk^wBW;_(k&?P$7!Rb9wq>Q;CrK%2Hm8+Vk(6RY9uO)< zTM7qSiX0W`L+~a7fN2GH00J*&B1(IAmW#J%HTVq2u<69}D}rTrkf{MR4YRV)dQO3W z)a`zL&h!$5=tJyOl$4Zoy1LY91PgIMy*ZY&0vF=rk%9>$`>68# z2Zi#$8w%1-(C1RdAZF!K%ISI51^w%*eNwo89I_bX@wPEXD%x!^DC{L9sL`bdhT_;n z;`c()LbX>8o&0ZA>IE%74A0e4Lkv!hd!qXiDN2yoP39auz5;Q_A)&JTWOJI4k|rI; zo^<_)SHlHL5;0ag^S)+a){!>RO*(?@qH*E3SNUo^J|2{~{&e!{-IqQORE%Nc?>n|D z?qY&$&i-@wGggooX$sNoO%dAMvX4Iy7cBo{tmSnOpJN?jNd2WmU%eRD(nq(2Mka|U zYmOV9R)yHI2kDn-r6SBq+?5D-SZzI75-hqtsNkl-78PrO6H zm13Ll>RvVDuA7MbXT?LnQdCwZD>JNU zfW6a>J!zfXSRf^yiPg7=fKAQVDZ+cM;YM##4h9V@mNdr=1RSMnD$KSLHp=e&)_x@X zAcsjeFR-qOmSyg_)t&uL`cO98b5?@%?mwkaTv)JlK4cG1gCL~PUUd=y_~nkDoHZbv zpw%#a%SIlqMd}%PFN9-W ztCfei%NJ{!NMxGXvaZsPFMfa+rVIWoOewUst>{}Nbgf09MDl&>isFa8pLawsaevCl zI3Z{-Rr_Vssv5?CMV+o9$ytE z7wqMpt6P|v%0|cOD6^8FFoPV>Ax`UDiht(D6(5=6Pk@7JWK?3F<2$d(szZh%WV5MU zp%c_KLgP#hl-(49eV8gHmWc=H+>OISI+;nbLkX}Yk95F!RA2@MRxI%E@p2;5V22FY3M^K~|xNN=~76{A6e zZ^WBnGDG3L`GagXC3+>-wm-Vjxgx!&oO)+kX+u%-YHH5 z;zKGs-(Gb2iygkuh-~Dhn(4vm!>H^oLTmWhOW9cv^Ld8a+D@bkFqVDdUSVzBVo_$( zq{^_K46UU(mkVa3I1XLF{klx04RwgduO?!Ng`p!Ff4_nkvJswTKAa->&SWg)qyp8< zA8}@n1({${jfjs?V7?Jd&S|lq@GC}g3v=K`$_%%!(Af4r<&KQUXdWJ6=vlAXBJV7I zv@emT(5+q)e>a|Mc6(Ve3XpBGOELElaXlJJrh2?k zj{*cMVr*gegP~v!bVsvPo~`1SXW7QWM~`AIO5F-JChCDc;4E9~!bdf<;y*n?T7Oda zj!*_Ur`J)sLx@^|`wk7dJ9MBQsGaQBL9&{s_j}p8^OW}Mb|JT3iwXW~+g>kYe5}rT zP14WoZtd#HfJ-=}v!^LmI=NKzTN!cP68Ew$MC{y}iJ;Zl$-2l}Jbx?cUKRLTuSOQI zN+TAC&E*Jj4Yd#1Rb?tA5!In-tj6d}x zFD#MP&f#3X$>n}6AiRPzbz+%%|{Cv~lxfVWE9JsMs|Bi{;V~jkP_azJqK+Yra zVN_5hKL2Z}OgER*A@Dj8E2D8eGB~4Fs|8o5pYFguUqPc!{#Rg?}K3oY&;R40@c;*R=!>o zV*0LDDKAsd#j8k}CWEe@os=rOwcUG)B|{p0FI5S(n0l;SOu#rwxj^f(ZInICOa5nQ_|_yLneD~XKZQGOwG zi@Z&;Eqx)4CN+d8=m)(p7*H6{Qyp^D`>vD&bv7!+yS&}l+so4xvfP<1#k>7GUx`DS z!eLXXCy}^^dksTeW7ke|o@fVsKaEu6F?}iy*Gf&AVL^EM7BNX&^2gIB`6~5lpJ|jt zy@GuQ{hTNJh-6_mEx_xcns`(g3s($plXX$r$VvI83Q2la2|%K6ir&AV`rIv6Om&iN z%iKfRMDzS?9BoS<2_n(@vs%$QU8#9I^3|=28%m^ZeJ5e{ReWshej?d%Y20=D>5N7V zRffUDs_u*DHl+oxMFoCg9$_jx7w5J{4v{_3${aB!obhi?WIjK)v{a^`05&mMN%whR z$o2eOiR|ZSN^w1mY>7V6ISZN88GBb;Uv#F$sY=}^4+(R#vr{FocMNz=r5uVjc_~r} z-Q4?Ku6aqkK^=MmoQmUYGjW|FX$_;+c{#ZB&O)ELE7+c&d*JDf9KMIE+%LKw(wMl> z0u7RxA(Y^1qq^BlgW)CJ>TE1xXdyV$P^?K%qLnh3eF`Q*6{4eHfij1_>{1WM5F^ zr3E85UasL0=14V$*LEzPW8bRncsOe zP>*no@LY{L4d-31OYXNs@Ye+9*g6UVi*Zu)TD*CMSr;+(BmF=)K!3&JdFn&Ko|01LmhD0j-ax-LO+JgI?RplW$kAJ+A`kllY zs)^_}t)20V49lvu9t{QHeq`%as0aftY-fL{4?NblEJ+}OUFzw(nqr0~oswUH_r@Uq zDHa80CB?wcE%D(;?2>vEANs)Qe72rpvp*Y==q%RD!j#J>3-vKqV+5-tTTS*|fY^{H zj3fc0!B#Y@IK;sL8)4AN9>1_Cro*wNflPc^Ssi*+`&Rr13M{M63_6dJrXm3}Y`w&H z`PReu`OX_*84#CxCadER135NEc04gTyzd>pbf$F7Iv+ER(R-l8@&U2agqsEC^VqoN zVuY+0Av1`=h!LyG@i%Ono^W*L<5yXZcTZZzwtp9o9uw8SW__A0{^j|nyxco*-_JTF zu~?*7mkW;3ax-PI4OSNtG98JhA$9eNanYUv)zsBZ4G^y_BEuq8GbF*SwXil74^}kY zioxvA+0$H1YQ{O=LpvY!-W6>d3M(YcTLDJlYwsLHVd79#lO3(VYZXHIa%?Z4;f3}* zgB~m`B5srEgZs|v448Ja`YkCn_hXeY2L2GwG5bBQoed@a+Y7~4i38C+$`yxufJS6w z=oswP_+d!AlZ@fw0O3yuT9&j4FZa9J35q2(I*(@ZUS(M^_X(7oC1GgsELkQ0QY}KJYi1~DrQ7%AOIxZ$^!vdbB}1gw zbx~spZ=kW#Y;;3U*c}`EQp-t5d1N>ov|NkQ2d;22ybkd`@_&b!D0h6C+iVcvK1Vbu z%tqouKP=NM7j-s&yhl1FoK^hTA~a=x{5gRS-i>FqDt-QIvAJzC!lk9v&y`On zMl;p&I@avkrG9gi(lJnOYyE@Y1uOIxp|cDtO6>Ariyrvzs)FEB#rTsIJe-ZK3x{8T zO%*m3(I<|hOZ}|bB@}&HfTP}^T~>ihC16=CS;#qDLSddThBLK`6Zy zgsP3m!4BP`MXW&U&3CJB+ukgh9i9B5UFZ4_m8Tm3EI=y_bKRw(hFO+ixk8&hq=gL= z-U%px;U0J(Jx=C8F;Z!aGv`z}4pwn2I0gB!)LGoDjEnzrCd<~pRO_8Elgj0`V z7ug7qV?vz_Z9?kScE!VAfApt4_lYU-EZntGRx5QLUe8Y<#9MDXE1y+Q%YhjvO2P2f zF`X$%n&D?ur5aLxmb{ul5>;vrks=@ZAPRI|@6KDW$)K+0-Pk{UBg;-=j$w6UbljET zA+kYI2Ti;(SVn7(mT-rr_Q(rz<2Qt1f)ZFq@ilhiloAmrtgQRY93dgMZrs_GZ@uF9 zaK4QHiwY)=5{JbB8^#WYQ`J?ZXm_A)ArpcC(4A#CegLb)gaZJ8u@WMe1e+UH1b&(i zO=;$;R8tp^kDzoisCpxBl+?cZGwM(0=y%JS6~!$Zr^`{?*m08{?T$PiJdForNM~T6 zjVwuRs%TDR9bqSfHB|8f=lau5Wg)5LDVaBXKy;g#%6<^RF~rlUY!VpzPVCW6!XviZYQ)Vc z$b<#fTynYp4YvOLlB^2aJa%hX>KQJziu%r=i)2!{Lwh11B_#}c*V)o2d$KB0?QJKX z@0^$*s4AP0>!QRK7qxeIn4+nkgq7x1Atj&mFG`jh8Yfma5aQ9QFgPK4*G5D0jgvz|b1O zV{5$==@p+TBg5J$9x&%5`&eBm^h+6r%k5MQqbUw6q^+8CRekke z8vYGgNF!hF`}=u37H>Rcs1*xyU!=^_wkVPWRZni}$5ycdSu9Cvio0soHqnk-BFxM- z{ac~(En8G!{8>zUrk0$As@i+*Fch-V)yYC^n7b&-_fOLQ+g06Pi3|AXc9_%5$Gx(i zfd;K(_nYULji|PXcS4LfT2!w9=O6~4o??U#&u|M(ZnrAft7o?^J~W@f?cn+b*WZK1W#CgX6G zVN~E~LFXfRqzrWeV{j2ml)7EXw^&nw6eraH_cFGh6lvH|IJTpdRwGg@?cJ3 z`cl2UKuYOS$NA;u<&M|i(Ek!rG|-W6e!2fdc~L7WTuzY_TG@=O{WH?knCS#A#ga_d z2x=f!QhybWO2qU`&O_-oxiyh4mQfH=dH^SrS4w5;DbdrMC%100o||qxQLhkqLMgyM zQCJB4z+n!55C7ka8xRHa^OJ<4+rNCNs<-!MUDO)e_AMTFI_j?OVyM}gFs?hOK%r%r z(6P*Ochqnc*GsF5ylC7jGto{xT6J4$eV)LkwE5HPG)FGc7)2Tdh58LQs~Yzv-CdJE z9IX)B7^FT)h+-rRmS%iGk0p>gTtB-ruSi*y7NXdMW5b@OE+Y|KLNqI5Pj&qXK}ToC zi`hiAV4AeeYIUzt&450Qnrjd@U_&V}Wo}@4!yz=VbaKcA&R@(Hx?UPh>pQgR@Z6jH z%;C-RC$@A8$|FHh1*iZuBSZ`J%~Iv~ACOUG1VP&4AK!k{jYu`Yk4R!FJ&>Tjlp5Vz z@q%-Lz!c0;kRlEkG5vXr27!Y9j1_x2oC@QBk(6gW)Z`iEf#TsvgwD_Rd-PEb%!u$jIjfA62i+|AS@)NzzvK{0W&(#GMu`hM zTpo%X{36|s%HV-`cUb<1V(=T7fr0hjM@Aw<)2}(7XB4jv%@hrDsXOU`#vNcuIbLtd zqrS@8*T1Vb(3~`cTTQXQ&StuHWRBgtxH)G({K zQ(Dan6 z1up$cqf)1;P;tjF5=P=~KmC-;=WqmpV?|B_oJT}UGqDwv!~w^UP;NWq3u@GKa3B{} zsP50}x4!CaR_=3se=M30ULZ9v|1Tcs)>8_;ryGLSi2b&kuvp}MbonV5?Y&lyXmZ|R z+d|O}L6T4EUKUtF-HT{$cd(JEQH>nmmo@B;mqjX2fSpmT*K?lvmZJ zGp>9TRm#MsKN{z=PybY}zuS-{U3`-}X}Vi&XHH8{b6`lc;Y+=n)uxSRaT?kD>pWs~ zaHRZ-u34pR4dn8j+NWx!4-)I8&Rdpt))hESwCi&o$#b+`<}v>q_wFr~U>V{rMBz(8 z|7hts(F-!_#gXAYv$rHr6kIA zPs8su&t#%DkOU^H@Qml+sL~@!dl|gfNKby2c35_;jbFL5Ix$DytGMJ;{MKcqNJjB! zsm?gk3GcZW?&;URhqFjAxRXxL6G1OI8sGLlT8y!>EN!;E_j9@{5Zmt|zOY_1S&_&O z-W?uHJ!!uIsU)#5i<|filkPklx}tOXkeQK#CDP&nPc*gXfP|9Jg5SidO}6m1Q_A6_ z2S3$Vg0nr|g-K4CgF+r;6b}@B_t~eKpi6G+ z?eN8qtOEn0@Q#h<>b^%HxflCMJW3|8MnWoQ z2X7>&{Lw$i{yoM|i3+BQAH(Jmf+aW0wvaWdv&`4gCGuI+N>z6rHO2s~XuPnQl71VT z=QXG>C?4;q=T72V^T34#_0MlzR{)~8BQwCNA|!YWR&Q)7U8#CuqSj?;>tHTjjJZQ*Z!i#2Lw)thK5I5T5w3_Ili=snBroCLAHa`cm-Daw{_nrZa&eyWjw%hh!YR zvYztr4>laf3F+YLYol<+pp(+?p&lscvX;D_p1!?V6BaFt7Z+wDMV+Z<9CEr0@wYMY zHr(l-b@;VW5a6xe%kyrn=>8p~*5Mri_#iPAYv6XA0VYto8}C^Z7K?M1l9q1M9RAh5 z=Q?f?*eKIkCm>}u7c+qlTR9sr_}F@?nTE>pv61b%@XzHq{Ti#HM@|)~B$9v*+IQg~ zI(hJM@r~^T3T2#}qk=L$MS;?&xuikQaMtAzyxOAvlmyoiXpN{o$1vd3MhF~iFF=5I z5`og+`=aBeP3`Lu+dv9TbyZJOOO37sog?=hksw0n(WL?ak_Cpc60_1~_rV{q$6a8k zf?^@Zl|{%MvJ02cKlw$-TdZjd>l{m=(7wE#-;)`e4W(dFGqSU7 zNEN6phO0^1=dUsgLCRU<+zJnI7Bj)kATc5!Ffr1a=tFCetzrnp5%8dhS_ujNaZ9wmgLv?&H&ukwMimIMTs4ZUJ}nUIhb|-qDg}4g@pAH$OW#pL zKQvQwIeBa1dmM;Pb==zmW$G& ziPn>0I@>aSzx}(jyN8gfXQ-uAE3w)VCV0>lIUz-n$*+AhiPc}VhM6{;m#imL@f`fP z@w@wrlLjJ?O8T!A+NM4t5k{@|89=So&}SO3MtIsGqssozx1~K^Et=S;*(mpW_gM2# z`Ghk??HJ=(DA92T71Ep3x)AFJSvn5?Tc2PXhg8D^PNuj33W;L9fQPFxh7IrAokr!{ zCXB5l=51x4#vwy=d(u-gQrCm(M`Z)Ngzk!FDm9QJ8U9}W@v@j`Mc7K=ID)gGYO)R_ zo&rV17pfz8zOfgI2scP)Tg~#C{@_=kJ*x3!Rc07By+IPd7z(7H4eBF>2sZLhmQdJ-c_LZz%%E+hwG`fBJ-)hQ#(rh4#;ms^o$QglNYBxvQCO17t zEs=;@+OSrUh&@u*raGJgAVjJ5YJ%m>kbrfi;`c%ejQ3C{rIh@?SOu|Brb&>kxwPQg zg7CzmZRK8#4dycjGZxN;K*_;VXj7-H$ooh=+m;*;2b{NxmKbUDjx-SiJgkRrjuW1^ zuJ&$6{n=~XjY7^ygIvW0Q zB#cQ@o~gb~#U(;cV_W}E{LO$8rQ_u!4z+WU6FsLha*RiKBJmPvBsl=sro!+FA($!? zvRh%rT=-Rk2RoU7S}}B!B;i`w<}*c}gC$N&G&pGgUt*eWVh)Ee-7upv5=dBbdZ-uG zh?N(JzIuVJZ8o?nTC|Y1Fp@xC*7WttDBi1` zKQSIbNuCBqBJ3A35+Pp18mjQp+emYI&W7);*_YurWZO!g$x7q(QiU23kUAQp|Z zK~Z+D&}0!!W*YrkY{K^XgmvZr6_r>~65(XA{>yF0#qLVfF^WBGOvUvzZ*{VaEAyxkOl@yM}J@^`-xVVJX_E0FDvy6DkRqSHG~js5D=|3zEmgGrd|6 znu#vE!pL=e_1O7+_F+7UoO&(_Drfc+u){^0!Lrp=#QNACANF~H1%N>5O!>M3g`>93P zMyXVwpO8Q~27f{^;qq9?#6x!s%>PB0#|Xgvh@-MkRV4MS7NTz=YyM5p4>`Usp{_seU6QBQ8;khUuYSjUQ21Xtjc|VEnch zf3)U%0Gg*R&WvH(tck`z<$LW{$x=?`Nm#3<_KtEETWo+Yh01R$l&(lDLr}+SlkvPR z7ET^H>?Lrpmdo}eU6o*EB!#PHY@Ny9&-%b8mX|ABwxMmA22xHfrjRy|(lsKHPY&;s zaw2N#ULXJ2rOgV#of(s_oT6ti;gjL6#l?>hm7Ym{DJkxc>MM~qq5Bnbig*4WTR6`# z_R;bBu#&FE{Nh`j81Y6U>)co#fh~mk!ijPm+W589<5_qqc_jmxMNac;;=OkwuloZ% z=rXT6=uik2IaDVmb00-4YjT7fLerN<{#RjCU_7yqu-o1Z zbaBzdnyiS|a~s#Vtum}`=_=M~c3ry|-+OBB`~tiY+&Z)a=v#FP6tbyg5%XZ{FAagI zN=Pc&W?Hvtk|&Hu;c@7lvdlopJWB7_z8t=@Sml?HKnUgEyA(U6nZEaV25GX36MTYN zW%A+Z%zWl0iME_sKhno^@|Hs$eSBOc(PBT3W z-k;hpw_Zp-u#|^9YHlMMlx8AT3+)w|KP?JiR+oK_r3I_Vcoo5oUhKdrxyfNwSsj~9 zMXc(5%_4%TG?i61$1b1;9MB1>Ng0eNGw z>8gB?+*z5hsd_9RP)bQ?_*+07l>N!zXyq@OR7yZ<3jeWeO?Z6t9FY&N5SGlu35N<1 z@(4R2t;5kUZmb%7(V5tRpfZ(Tnjl=cDEEQYK&|V@S1zQNqInUaj-H=;oD@_eDmSh?gkdVEhhNxFz@PUy8{?;^3WWovrW=M0tezCsi26xCZ~d_Y>7O@_S7G`8j6b!#a9O47L1(Wu_^#-VCp3Dr;`XF4Yr-zpBpX2~vEauZWK zV2+1J+osKlN5QU7iQV7?S2=dK*0R3Q>D;(`!=u3*O*~=`4!}eJB!!|ZGi%=KRdEG@ z=N-2Hx3==B^el_(55oV%#tE>s!(#)^Vc^2Q7A zyKX#_joL%YCNpZfPSY56xV`LSXc|_mU3@9mh@9^#^lR^(o=AGRT^e+d+$4ATU(3?0 zf`rmT<^d;A4)w6zxcceCWr(ffjDJcLdb|nn0qAelOL#82|02~4W4A8(V942-z+DO0ZYm>86bt5{ZaiAF zLD9gl$03NnO*?47R0)(QYd-pcY5DB1pcsuUE8<+~Ot^`_9BjtPG?KoM^}xI;DlJ_Z zKOj!tC;zW%uj~t~>8`n;M(s&N01Y>z%H8LEh%E`1QG{(?wMEkmBVP(Zt=oJ+3{mS< zOy&}?U$Y~S?@n9Ul#yA5nJO0nAG!3CXE{vb4I6bK2IX==N2wSyCW%0=$U} z{uI$t|E--Mm=WB>-O&mRlA@wj%3*CN$e*WkB6XpG(e9XZuR@(26p6VML9di@Uv=>h zljW4S$O&+ncS%PC^S6pq3@u4mTh^hW_`FU{T>vGhx13>heQCon2*XAB?zNuXCckp| z-|Ls#8!banyDLGbIyt({sUBjH1xx1QDAwgAVHGKr7ZQ(HuFrH2i@>dxvnDD4W7Sc` zqBj({hq+hOgqeC&jnYhUwK$P2$7MJI#jPcU(NQn|RkcP4$?q8`32z=|X3jEgzqJUb zB6~0ggoiL+KJ3aWjIdv8qTY2TH>7^lL9p^<{utC@)F}@x#adCOYFnbIuGFOq!=IX90n+`I&$r=BJqMYl#(z;Mw*nfY zI7I1mC^rVlqQYXhRYGBUIrK@YU{W#G3DJEIrl{IxtFW7JBYVR}|KNTdhk1jBa_vsO z9WPE4nkqS~FL}j=t`Tcb%I=AXB_5c(WbAPMNZu^}Pd%X?kEpwxRhz%c>#MYj{|7J& zU%3sTyqs|VJc~YyMi*a)d>huU_I43>LFEEQUU{D&q{(3B-}k8UMravpG9#_;02VW+S)94+Q37dd74gT@e4xkW6zQO#OA zpjc#T4zoQeD@@>92;XUNtgqwe9H1?_gX6Mo{oqanW3eI|X_;jlscl*jE-1|r3<2(7 z{<*FZ2gij-7nN@rP)LUC1n9P_g+qgUvl9q8rTZYPv-2k;#iJ%a`Ho76c9w$r= z&lGP=7HwW$ySKAJ_8{cB{vXo;8Bt;o!Pw`Cu<{aC{pixx<_xT22;N+6BTe!`txuvo z1j&zN?1Yqa(U|$gkX(bQ2ezdQO4H*1--U=3%n{Z@f?H%X2F65>wq4Q$CmwHy-ivBj z)|toDZC7^Y>uyD~ymfs9J;bSrKTH{3fjC9-iIqf(p+xFJ$5gp!is<|NKPfZd$60K! zugX76i(+_(SRMEt<`vjXp6T&uan&nJ|qO3iGTE( z^z^YLztw%uA31gEvXJK-i+5xQMP%hD@m?@njUsEDJ;mhw5~TfqQwIkzAP~hX*gg2l zv^a>S!q?~&(RiaW#SFlZ!-*728yN7N{!DA;ryoWkl#ZPbp2HY3rGvGLI4lHwOBn)a zF#J*77>3t0VNd!Nm}ktB9f}ZmgaP=g3AkEK?izu;$d(Cq!anmRMf{Ykv2>`Y zCz(1nW(^*s419&%6#7g4MO?9-oa%H@!WOj9H?ln&2)IMZTuf)l zVtP9uGoFFkUE(R;BZ7@B$9}{YOwIQoyE!JN>(yqPejqBm&-coBuBjD-{Cl(Rn0lWATP?C-paDhh5e(E>$U&m|Z^BB4RBPKCmLf9nd8O;BMkO zK5e}{A1I&i-<1G?0(ByFq?D6X$)&9iSdZUyY!6vJ7C?Cp!-cN8vIQplzmg`(3=f$p z9VtK^W~7~m-Vb==!C}^?7TAi)B}gQLwBr&IA_~3jApc7)?Fj6j7zR|2Gs?@$Q*3|X z4n@wa)@i0AaGep^F-G8 zf923cr{}lUypw6i9hT+3Nz?+ff}58KBNo(LXKWP{pC!-_diDp&edF$zV_Xb$*v|`3 zWq?4_tRWQkG^N82+WFoWo=fOGY)9lMYIHpy$z-<)2Cqov8Z|q5Po8dH8XqR6-;lF= zLIzkn7fT!MLMf0r5l5pj+K_m{u_#TiK2Qukt`cMDa|ALLKmWBX2TKvyrQ2~3Q|nk_ z2mKD%K3?fw_q0$Or5M;qJ^1gt@0?cFA^}x0hW%Na_oa@@#$gNk`%LQX|4uCW#(@-p zsqMmetxRf#<{7vfKMg)$!}qpRt+(whvTz9$q~hvFXzGZ@^+w~|A|NA#_=X%4v@8Ye z6uc6n5_xX>_Mzf)M@UF@dojN7Gl)W<4YN3l!8MM)*Wq^7 zU^62dHTW}lBaJ)k7o(1) z!iC-uY;b)!wnm}eqcKX&rV-~7mGR=RQQ?(wD4e*JHsPON;~`|)B}_N+e11C;s!dJP zsm3DV{#)+Z$2v?y!(g4lb^W-D^%~kcdw$ zW6x1ePn$_{cnCJ@QONq)AkNFLfY~CXa?uIz5bd8YQ&cfr%1Wm;%;1f`_dKzPKx=l6 z=RKaz&C9}+^lmrmJbivn#hyw`TJQQddYX7YWgi=GH_>%oj+BLQHf#8L8_rpHcdLKe zdj|}g%=LB|7hE)kAAJcVvu7yu;3~8H6wl<6@R~PI)C8Lw7_AvI2`j*qcALr3pt-n% zOSMk@`2DbCXz0p-k_~*HS{`V0qA6gtu`|!z1p7i?5_zD8#k9a51SQ{7wX@LtbgHQi z9)K^2lB=>jeqOC`R|aQTKL?@d!>V)aAgqbxJ1qQzl&n4u5P@(z-n=KcA1~HKZu=@V z3mLy(_O9D%uOU?NbMv9b>pkFqoDY6E=K8&Qp**7^tjjunw=@VAT zL$qy=@Cu*@eXHVr`6X*%Sl|Judh`#rSp>|y&#F*1sY%6j4Aw5$s9;wg6TzwX2fJR(nbud(`i*E%}f z*&gr$$*nKDS1oBC3|RX7;~j{~n0r*LTF=h(geesnx!JP-sobzNy5e8=z zWFxkuCu2NwqUw1Aa%5y~Si~_XpxI&by}XfD_o^=irsUs|Q}ONf>~+AfV?AKtauS~R ztP05v=BjbG&)^S`I)pX~-ab{3vgTXl$#gAP1SDV|> zw)gq!|H-`me(BD98MLw(e^1-)>GwkNhrPHy?IB(n1$;Nl(;7~)13A{^rxMn z=RF0VF1I-qAw>ut@lOAKy~XZ%lJL0l-m3hA>(;gPez}zNGF4jLQXHtARuuz;B~U*U zcLA$NJAwn>eJ4v9rW;vcSUB7sT6#j_vOlXG-ye1R>!P71B);#jH@LVwIpEgtoyLZR zi2dQuzg*$OHlI>26JYKJ>IYA^F5wNI`XIgirkXBY$dIM#jyMTQ28*&N>cotVuk{R{j-VQscInfo$~f1ec5|9kPxknDG136rn9M}A6KKVChL za>@u1G!xz?Gi)ZwLR}M|hy~8Hr{S1Adf~k+n$uB+m-K? zEzL0Zo3Boq~=uZ1d2@Rq>P%Dca ze)RIyXBX)fhJIg~Rkqi~ghU(a84L61trDtvJ3sgrIBG)Mh#_sXo8%rUnnZ`qgB!g< zj8G|el+J9}Fp;-y8xTEEP00EkefdsvQkVXz1&(Tq&X;KqSG33n1|b!X@7vT0uoI2K z==5I+{lzQ`)1>-TbwNrwTUypc~ zkyuO_uyuXnHArtzuoUK6L+G8#>an)ASt?dAg0jSr-u=z3`f&WNY24E8xfj_F#Sa)x zohjqmHF%s3I9~j#Tt0)rXGK9^Ek!1C0a@Snn<8HC?q0^{B@-CKzIzVC`kw`QKf1?H zePd9y&it6Fe;U;r@84q_{)!DmWHDbH@T;y26(sV1+*<$gDJs}n>ZWJ zzlwP--vFH-d{bKO{GR7{EqE8SGLd?K_D#Lpj`D*OB9X0%aW+i5xA{jEtedW$I*of&2b}1-Y)$~Prz!QueC&K}(Y%4*q-?>x7~f(U9mNE% z1CZyZQjAf;r~Wb_b{Vs{U8?XpbJ97-ZdY>)uveA%a1H`o$W=!~xa#;w)@r~TgfPZJ zgHcB;9X{Cyv-nsv^0=8+VMj-*5j=C&2-TRm9Cr#rOJLy<+}NqNI_-IlK$?*Ri!#e!uH&a6@0OZY3$5oeP4d4bB-8V70U>IGnj#S zuIEaW^hBsH9Ig^y@M)Uls!2;pX$|X)^B5pMJ+(imZ}n2eGEYq72l)L^Y6SkD?yQ8H z3h1Q~>YH>08wdkUD$c}Cw=Op z5(i$m%)hPLp-1SIa#dw>1#Uj#0iKVJRq|!YGvv+NRu-t+q+q%&tuE;*sI!w)l$a`h zGvUGz9jtz=1IupHYrj}yr~gH#&^q|b5eQQbjga2U(gXTb_Y{JgVfnhZbuCx6zu2TQ zG5u+uL*U{2i`cDmMeBG5ZtK3!3Hy_hFZT;DT;!8?srBBdB!Qf~HkF2s0_m4X9=#?J zb~Gm0OeYZST(hD?yi4W?2zaC$VlqMX)lpA1ce`QDsktYXMZlAard2 z(H}EjfocXyw{;NUf1qtNj4@4c&GO_rdvulDLw@;gF5$e-cX0~*Mp0c2hl8ydxC!rEwWMRZ zE2oLd46yc3M9-&4%Z_eDxJ{XQLLpBYQ2P$&LP3g&r)Huf8*%dSlL9p#J^yY85r<54 zTW}`{{jc}x2Ob!%zPjaHxv}6|@O)x?=ob0f27L4%%cMNVyKy<(zI^WrSzIUa@HuLo z#B!6ayZgPK$azS7Dty8)s{%kY(6!R%z0zs1&f&3-xB*OWl)-(WBM_favB$IpXL>Ve z59YRy9NQUB9!~6ZJa8&(G-%_KKA|c?@WKDYEy8j9_Lm%V8jnuM66|!<^=I*M$1;eh zN`70MNE!?a?pB12L|`8D7M8crXZHrw$m3K-$ty7t){F#%-&VU5t&sR|W z#odzR?)w6dRQ)Cu_=h}Pa*$2kq1F&Nhpq-dw!@IDD%2$|B{%ej(A)TX9^vKB>4KMX zXu&(j-bsHnG_~3ciLIym{^}y#e!<(X&<3-wlrvZ#ek8na)z=ejiDIj_4g2C`vzM!m z2jUfNfo|(!>_a#oQ`+!SSC}i~-~}T|XSGf)B*g*vQY}v;NfU+Q2Cymn!shC-`=;V% z>M7ogOVuHZQco);5+HIAIkY(>gcXpxB-pM%lE7C4@`D`Y7ZPrOJJIuqROqnaWBuw5 zX_OkfCUmUl-Bj57y$D?nx`UW&9}3zdfTfNihZZ785rZw^i+pQ^E|F5s)7Y0BAj<2H zzs);|e3g!!+w{Sm>1jwK8+!l=_g`^w^2~3Qx%#=440gUDkPoGRHw1HAMyq{$T#kbWiRX{)B|1eI=&=6-^G~ZDqr(jpp*O9;3l86S$LG689#NgxQgXNRu z0}q92Gd$lkb{I~j-qM=;J*|tdwX=JXQ@-N*gq1!fPsGR1SI!@w*6JY*MtB8GsHtPo zBN1-lZ#_v;N+Yyy8_5l?*$G4M2S85&2}E*~ln7c~hn%&)pESLG(C_cD=RHRw70tl* z>>xV80R6ZQcU_?irIEQvEGY?}JA*nzs8U@t$*?k7`f!hof~G(yD~@pf@?Lgy2o&^J zX}J9)pX%Gf7$1N#2@i_qX=D(8a1cla*!bt$^rt!kNdkX9tR8ZW&_J|O3QIH$Evc}2 zy9L0+k>-$qzaBzF9VgR-2Z@-e%5;HCm6;2^37ZUzmCTW_PSn_wRM_BG!d07yhto_b z$towc(1EGB&t2A56&5RlAjGL8-#`Set)2_HF5R{eyO{6`4g-&_S;&sX0Hk@RQ*H9s zy*Qrj&7B6_n#7ZR?oqJs2lDh?4hNYm3=fB9?FkG!RW{SepKhCJeJlR&LF>e-%9PSr z@0$yZUs^R)UyhPnZVI7BcZh~7?E1%wjc>9~;I%)SYF;ywvjffmxd(XC^_Dpol!YkN z*f`di*~h*`3GJyK{J#{+L@-C{&pm0ZEOybhVj(5KAi$a7V%xJmGcOOziPkJ(W_VfE zjqy{%Y--vi8OdEq*414#0a(Y`e-UD$aK{8EuIHf#-Mb>fM>4}U{p6Zh2eT1kVCjpB z+fY)-IasOqr*TTt^59-DkCIAZapoa$MJ+$K%D<$-GH{^8{DnBVxrtE+gVKYFDUR%X z5fh}JdmKTlIAU#iYj$1JC7QZxW0T@9Bs2;?08fOi4`5hvMDrxg0nDdEO|KHhlkAQT zH;1|Q#&=C0W*P2;gZdYnnG(@XX$xj$-g3v1sH_l@#ltTaKxjueV_ga ztJl#SE=9Uz4{Co2f1SA9)siGwWU3())0|)HKSy1rt;CK~P&B(*E@5&ETj#%+2@CW0 z{dLz@d3l%YSjLIpzwhb;`rBKiBWn-6omVxqghGyt+Yrfe3uRQ{JV3UK05xoD`dFO+ zu14u1k9{?~Ie8`a@z!*le;GRawXDTO4IL*0ipjpxXnIgJ9ol3pHP^wp=8ya=sD?JH zz8MY283SEsyo||dO60MDDV#`UEFI>-vsf{THIEfToyY+B3mB+0V-Bo^KRNTclj?yT zv6KOyX!zhI)Fo*ZNT=`K{irSnA)_FMD}U!`dM%RMh=W<|iS$X+tuQ|Yw5WKQ1$(7) zhJD;`$OO|L2qwcQFzgc~%++9mMEq5CBP>-Kh{tBfuw{TMV}zr87gDeRv|*Ex(IT_( zh%Rk`AINT;Xfk+5wh$voW-%_|6aye+(FB>{w@faqmTOU{C{u~2r;-2Y7v=}C^JWm@G*xKBO*{GZgvnP_pQUequFSjF*t2e@TADx>E3QMol=&gUXuxNWhTJ6d&Y?IW4W&7y)Sb^u)u=L~L_J zeoFYM{iYSBQRKf7e|R+tO+w9ISxkF-6WQ|^uK0yQFOA{A%`*bj`Tw{=?ALr8%1x6v z8V@Sa9`RMmEOAGddi7lMAC)sGOy8b){Y!li@}G%ZHbpE@8^--9i$jB+Ghj;i0z4QB zQ|s+d*|6E-K|-JFzANWh1iS>gJm}2%Rk8DU-Yv@fbTYGOgGv0pshOkK=)5{ufDUbX z`nw``AKK+orHThdH}+2WOBUqm*CqCzqpVRcJ!pu1l^%O5H-Jzloh^QvIe4*QIlS|h zZ5~0AwkCG)&ykA$*P0df&g<)8=`sv6&RvHP^2g0$q``;%L%E%74u*x;b>Yy(5%=;( z6tIQb-jT__(3)%DO;NczG2SKArat_(PxD>(Y^mj3vx@{Z2aN6ZjaF1W<#!MVEPzV7iJiaIIe`jlA#2>D*t(_vcv^Iewn$I7V+~M8wv?Go0(Rz<(}#r1T~bsJ5EJ z?{kg}P9!TIVk#JXW5;HBpjSMQjM21ZZzgJ8M%hM=*XHGMa+cqwVvB+~x*#H|o_*@) z^gSK{?d0lc%>4HC?!j#u zk={wUimx@s0Wq(0-}}YZbFhnq*E{%V>jLn;%Cj+(v8y~$H^0Khz&V1D!PFuCQG;aA zsPFj?qQfj2|L50n@PFm(@sQ z1ZM~z6B2K|FE!|mE$I&-OxbbuO(NSBe*!F~{B9c>jzh&R868cIqdJb+X}urQi9$8o zKS^|X5a)J0(+wexJ42zv`hu=p+t%f($A^@l6YnCTdMXX^dkh3GSU6ZPsJ_OT~|)L2kcxu_E-WK`%UMI48i_T`?E6`_Ik-%03oNu(>w-fsY_jS+)y7Z zgkXP={m;-s8<CP+Fd+M>mOq?_x*P zDHw3^GN!wt(&vv252ok8#w#oqp2eLz=~GJV)v* zR4)>YgBAo(4%1vDp5t8dKK(U8Qi>`zlSs!{0S#xo1eKT?IO67?G?r((mb+!O%s|P`x6h#ale}VPi4K$Ag2`avu)5a zt5|f{x8}=Z^PUl?GoSjC4v=Mt>zxQpj z$#Y_cfn{3INl#Ihg&==kX1y?$PwRPkdHiWNj7Y`5ET1po)QFd0gU2~K*hB92-_m!# zHZphqi1pZHWeC9s5#%0^TmQv8pip|6m7+iX#v&+`_#jD?#81oGJ|cl7a7!Sf-Jzu3 zLW2K*&cC}fFe(iN%fQYu5Ck7b7$aLOfpG?GvlX08YXgc$?DpgP*nFOD=T#aMn5$VQ z=N`huIj-PP#9(Nv=LjMp+6N~O20KIw^sHwiDPa_p|204|J*L0^yPNSy*w(lx)TO61 z_L;h}R_e!*NQ!RpFHq5;iXIdJi~DUGa3+9U`qu&3?kfL&US|z|DxcWn;v2hOJcwr_ zA?y#S`LqlvTONM@r+(talpjuuC0&3iKyBEHK|Iu{FcA#mezXmEdHy8V8lnwB2Z7-`2I=1>lR6+fh zXg0|1JS_+uqK@IAFJY!g9S%>c#M6mA3AZJsI;hf97Y!CumdsxS-lPQ^zxz+c-10){ zcQStCUtmy}&an8Xdyj+pv+^gt8$Y+uaNqOS(7VHasCMf5+Bp3$NDo|VUnLx(M{WWa zjCt|I5bu#KfwtQ}LRN<8)Z|UYu*FUVLY^R)vXm}`9GNohu4F=E>8f5+b))zaIJ0!l zHWD;zVm1&6%uMNMgNubOsevgFY84A5Yk~1c3LoMb#*p;|dwW^3Cy}O+6Y! zr*cOV$_v16*Hq2YB0!AHe3a>8Y{8s4r=c`>4!0Q9Q`ijE?c4j-XVHbS#@kOaPoh6)63tw(kBV16+ah4db~dk3u&74A@I%u+(W-@Ck^g;#iQ2k z;ME1P&DG;p^s!lb;`r@-47P$)!nuusf34E$kH`7Y0ECkSFi?dff!P_2pUJFLMGSO7 zv=5;A&Xp?YV2MX}m>3u3qBOnXIj^5|=wx{6zk7Uxxt{%5!9`#|u@$`A2-kYPPL`v5 zhJ=`xU4IhcICyw={9=~rZnI*+xx1!?uT`Dqpe&$i>3Fczo$)3*ATp)Bl6{1mnsp#! zFD!TyXpsiUMZA?VboXS4JPIwLIYQwz@sK>mldU7+U9{N}=iW?|O{j7i+#eQm;N!J% znj7-Ju6-i0G-N;ls8{B$qu3!=h?=1i;|O-yVk6s4JRA?vefIK=4VFRZHVe6>yxxwi1Ifo&#mkPU zCv>0dxFi)SMc{GO-MBeJbQ+GCin;WxYk{-&k!rEJImpbcrDG3HNy`z6{+iX~t506k zX>iox(FVO@>UYU)HZMFg5m@B^`1XVUoF>(-Q-(gcPd$9hMXwwqL|v@0tzyE2x9ko~ zoy!LeN7h){+}$2fh3EQxJGh9^e8MvS(sf=w#9|~|(XsTR;L)i{ZO+3W{&Y_02?rY4h` zz@gVJFiDbc>W~uVHA5pIpODIw^(Z+_U|w=MwIiGYke-xu+RU+`_` zv9kY94gVK}%fu^O9q8Gvip50djGG%?ozT8?`>C|?JDV-Oy|*$TC#pTzuX@j?pfAs| ztcUfISak0_5hkvfHr82)wj5RDamkNW1$xuqsqc-&spU7+7o_AN79e4(E@q59oS{4Y_FMRt|fl@b|#`x zn~t76?AXyMB;0EMf}erZ^fL;%-q~McT29^4)>PIO2wRt7dNFP2jJhDac{ws zrV!AqIOwILIi82x`17|EOoOSoAQmy=;Lz8fM5k_^f+xIFo_t#g220`2C^%Pg21tQN ze}vV#ibbsJhvvnS_}P5&o=`H)+7vfaOMMt|{8M8<00tIID}#9kuSA0?EB9AD{%<9P zlyZ7)Jz97(i0$nkyjn~|E*suhXvPEe#v^|Ucwx{6Cl)N07Gb$izbOYmZ1;xM?ar}HWI{D#l(>uL|y7T>|a zL3+rXunw>(*8bdGQ&fM9dn&J8vj?o#?G8AFGTcO=^);@F)ZW3+U6hn*@o7Ac+gQ(% zJc~S+6|yt4SA7^CIByJir|8;y)wF79r{N}FIX~BHWf+_k(R_)%G(Od?k!K>l*+DU4 z?>RGglfB(6_r_+=+oBTWHDpkn7$3Ja*W+FIK0TS-Iel81##8ID&v~V~{*+zKf8bI< zQ)AbDpL_(wK1=m4L6Y?GXUtXl@AQY>rH&*rRjR#dARA9H+x~Uy z&>poNWCAEK5MTk#lHV=YVy4@@>i1sQ2hH8{^gCZ)^XU9Mp0HP|{HBHQRW{ZpLv?hxX4e`*gt}6s)vG>-pyBROtWp;cMJMd9*x*rc-o#Tmi{WxL z)CFk7YAS1t60?`VGt0u3t2)1&J8hR-w8_ZxtXk?)2C-Asc7*NMokI2n$q=y%9X|U} zK>FiLBaTCD#C@l%MfP6qm-UZQeA{LC*I;9!KvJ{sraJVT9^Dk_{T`}(2fe#LGj`#H zJ~f?oZh{8a1G_ehb?~MuWCqCYr>VI}n;f_2U2bOYpxxAl>8X-$ISYSy ze>(kMU1uEr#m2d@2BZ8a_&an!p8?meuV+AOBHfhPq=mIL!{)dWFBvl;6E=fbs$3yy zp1OF}(?rAE^hMHY=n%#z_zIFad_c9|Tf&jdJmVB{mtlfqA-|l?5NuqcZzoY-hZtC= zaSWF+8K8Pk_ODk^gz)%wix={$_lz~@HgJ2J0pFwIv(x8*y|w%qw0ktXA9L?A9JzN( zrkMKP&^r3f32(E}PReOlm4aKC6@`>%f5&jK*q^0jU8GVr}$66=DLqyFdWZHmvvsplH45$ zHI5O?cHl+{7{CRT1qPbyuzO8{4{A`_c6*Y>WbavihJj7+@zrUk9(-^*j(7&!b!s%1 zN38+O<`2fcg@Y4o{koq0Rqcozhf=G6v$zyLHTUHOh<>_!meAwRSQf;MavnEMR^)bX z2F=_eWzUEkRHbRuhL{iKkxBA_P&Ov}+8AM22^N&mExjl@>RK%pg)V1q6F#2$rWE%Z z;OLiQV^-4r`i4ujzCUe?N7o`%+5nzs9YUm-1rmt}SJrWqa{JBk=AuBFnOt??Dl(Jfx_ra^wx+A4F?Z^-qfdEV_l z2?(kCpoC<8b9kvPEX-oM8b(}yu<|1LyAa7me)%1)Y$ebjP@Z9chL1QZxUdJT!Pm_w zbFm_81k#an)y&6f5E81XKc8XybaiC;HIY?|*r79t^aVIc?Sks0p-#s^tM<8TZ$wOcJOK_STOI>iYG?vDp@om zaxy;Yy?Qb#)q2@b|9-~b$ z*u`Jn|IwgdPfJTLKh_|dyjkpn!O2Obg?ICJApaQ;P(ML4a6YOnbm6IP0v;lRg*Jll zDR68;!>huSI1+BbeQw4uHFoL02Z^?W3Q2h+qFp+&s~uzDvgCx5Q6rl0zXyS3L4b~o zyuFD!y)8!+ctN!Gl95A)N2EF-_3^$W>q}!13_T9A@?t9bpF<*INY`5DldM^}B!5;= zl+jiMBG4$ccI&k=yyBD0kP=e=%U1syVjVAPJa!3HPsY&4!ZBEohZ31}ybLbD zXe7uI23K2WyO_NRU~*83w=|u_?{+E2)fI63SkExQ3C zc$g_{matM_be>5qv9e_7>;KGXs{)~Oix-Q#GMNXWa4dtFXe?owAg&n0(5LXUM3^p< z=t?QL(SGW2PG7#wxNLbXrRizOsWX*n>R&(Us-;<5ROI2lk%0E!Spmx;0Br+d7jtoW z4AkIEzCUlA#7MC7A&&!)wn5Q%d)~C-n##(cOZzX}g^r;V#xr%Ht%`L9ep%(i>Y6G$bk1IQI6-tyc`D({?# zlJ>>+lXdP^hm0y}G4LYFG^G@hgu#>|Xen*+#;Y1s5-$21H`yVsM>RBqpx3_Mn#Bxo z(Elt;T^vwq9>JDaG&mlJsI+er@|COIZ=^sm7x^L*v$52W@9HT280?ra7Nh;`qgHlw z%sff{ArY_EEXk2h9G!^dlM!A;liNibL(pPotKDHPBfMr$VN8HIY}=g zKN@mts?j8CCtK;P#4DMkQ{BSW*52N(wulb-Kl2E4?PTSoxYM!KeA5+`446*jK~9?! z7QmqMHU6$N0jWCB6P+n7li+NTbgx`fzCtL-Ga=iaA^UAgrDRN{;oVmD4ihtfL5xW0 zYcp5dK1{5fGwJ!{I<-Ob>qs{oPS9I)NAmSoL?gACV4+p%HRQK1_9d(zE7!)X^E~` zV-l*AwwjQDKs7eyo1-Lx{SWwm@9$+a7?u`x^gfIQV7KU@MN3LD#H<@P4FG%UF9{fH zmH>6LRCHH5(y>`*-(53Xvk;#&l^!ew?!mF|$<=0k?WsggOH1V5A*1NdtQN`Jj!sQU z^z%4_|20>2=&uNL>Uj@V&SpE?P*`(xvFGhy5@>(o;Z=A?(wm167>9J*6i03=LQC_L z>{?Rwss-5|*vr2lHS7?Z&%^9V@n&5wXq2wFKGw~*HJ6p|rj+)!)@>^f*P9M&RxpkI zZ)G8YS_sDy3FycxD2#@E%_9PTkxf7)VqFOePriqUl5bd^fum$EH<-$K+IDCRuR7iv z5t<&)%IJ(xX0}#4IOnn2FRp4~Xe>@L7LE^?VbmOpV{V|pF4CWvn7{}_Cf2;mZ1wkX z3qAbDH5$2){7R3wLd43xSaXMimQFT8*y!h(J*QPup<7LIfhU|pUvSJ6$xO@_cg!aX z=je&5xPM_~>}Dq!ql1smrhP_juA@YKfU8nx$6IYXtV$?$X8m@)TyPgQ97jwXF{S+9 zy>1H$fwPB9$X7fRbFpUWYD=uugB`LtF}sq3Rc%xdi*sUXl8a7>VCZ&Ww!hs4ftu60-KiysVubz< zJ#Ca8GyAK3Bu2tG)HT_+4|kK=z0RoC82VwlrX|D=8gKH0tOW#lpb!~b zT2u#U&G=;(QL}B%4sefYai%j#$CM|gD=K&r5_~zGJY7-%JqsK;ikY~RB67g|>3;Rw zuJq5Q9nD%eFV^jw+K_eJ@J|aT_s3d_Qj@l zB&0O0jBSm=E=<#dmr0_>_d0mH4&KN_tgxE1m(6K&+el}W+q@h$hw-=EM!eaHLb9xj zZS)1c~{<+-Hy-Z<`#S^pquSecQ zH9EK8|K=>_Go9Pja77s0U*7NG-D^YAa`&Yuuxoi#R8i+O*QzC4*@Ouy%DJ@l#a@kU8vKsDLX~R?Wdb0ef6=T{uN%% zoQbB!#eDM(kILk-#UbE)-?f^6i&5DPn=4iK!iCMuhqiX=4 zCfPW+!&^-(Itn)hlPyctJehH!P${GgwX&^lI|bwj&1#qX0Nb2fxAbwizdgaWk2H2< zXVcPeX2OBqX7#RN77r(coBsRve|brg5clBxe5(5eB?{htW2d%!leeG>aMa9O--pR` zB31et*(edCjCer)@))c~PTon zH*S8q9!1g;C&z=luVZIx)U5%XX7tT0-QwWcD`A7GqI0~KT

*ob@p13g?Ma4xVv; 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≫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

ArF(6yk7!*PiA-!j>?}p*t zuSFg7-^LCA@#R8u1j{&RhSIcAIZ&dF_9*#}~xlI8u{Bg1} z`;?m-`i6@({Jppk+#pghn*q=r~blJrS!c^`N1@wVLv=JFT0Nen7?rtqG z@D_-Wst)!8phmM7IFSf|jo&FlWtuJU7nr^@21KPp@w|@smaDzkJKJB7I%RwdSn?ht z2b8=1bWP1c!j>gHl2&T^#Y4FJ%H86`gE+q1&p^n&%Uzz!5_FkiJ525m!W#4)Wk%8|yKU{58tAU=~_a zU9DUUMBd!R+!uOAa$+G0VwG_OT*Oif{ne+-vMP*_S%F-)6~GvGzD@F$Qt$5psS5id z@WT=kZaf{Zn`JW_bVV1BZ~#oc>tzB~u|>bp+IuWM&Jt;4{(7wQABqoSW4F=GJ_Pxn z4w=vyJ~j@~_YcDNssQjM{w5$orE8k6$cnkE=>%&pZ*NfmgKn@5B9Cb30CEHHDV}v) zBuWD4Q8sDe&X^zV)dUxww5kYv3!eS0^GL;T_SKQ-hqay4tl@-O56}g%y{E1lqb19_ zcRymJTNbs}_c_Cs^=et$%usL^Hb`1M1I@|ARR7liil5#7Y3I|aLzY!K_#@&{A`m19 z0+?!Vb4+x$i{`A4$*05U;c&hJ^c<_d4tVMk`b3aI#uh3^dr}9mFf7C%CSHg3g}kkX z+UZR>L!f1$=icH-0>U#OX_5B?nxi#9!YYY?0C}UYb)=;NcL_lvp}6AXzFVX=o7dOv z5NURwfg8RAnE7YP^u5+kZTu5D0R#D$s~Ppb+MQ1>e3dFH>iZDI19G+h7<=-rR0UQy zBhMe2ytQ8WIv<>Ma4yPzpiN;Y7?|!VcH#C%SKwSt>YS)?=ba~FfM56dDn9y6PIs{1 zb-9X&e?r(G_IEPRWe)N0)W4oxSPy@0BF=?D+XRqz%ISO|*qG9_zz9;soo6p$R}H)V z=4X$KHt`x9q=|l!AmeuF8W}?SGgND!N@^**h^t&@`<(@<$zny$+yIL*PIi=vn$0Ec zF-r7CHdbMZsrN>BnN;{FYwLEhEDcOK(9QxIqj4FmDek)wK{c?^!RHdr%h(vOQq96x zIq3Y$8sELaQ@50`TPuGT@ETjK1x7|NebmJsN;hkprndZimao+R%&J_HjaL-1-6m zc3wE0JSm?#a8ERE&UxtcK@*%au>E9hgiy!K=m8U71`wvac`ao&I-(svtpI=*G@Z!3 zC5UwQ?R$sn#F;tRZO#AgAh}VhNpEi-iHm)&+CS~BF7`K%jirYvFg0wij%D-VWcS|1 zAO%4_V33wdQ9!F>Vu_F!Wau){MP+N&m|FCvJ?!oH#({Q|02%^1Cjioe8%E_(&ynCt zTSw}$4j4Y)Hk+PUa;2*HuOs%Xca+6dqIx{Qi4Q*m>REd}&tv@!iB51ReoDLcpUSRN zZ^z*Tkr28I%2zaAZKu!Tsl8o)UYyJ$NtZ%?JRWgZ%dh$#5})z-$dIUrLDYRJe~>2L z#a;V&UJkYmyImZUj+{R16`Z~8C{jD$60ND`-v&4C`a{uN>ibg+ALvdDv0U06+5Ulu zOMA4>rwS6+Hy+tPq;Cy8kVigBBLVCC>V!X^h!EZ{t1)L{W(90Ggkc5kci*U z`+HTJ9PB>FF?C-!F5FoF z);(j)K#l;4Wk#PTe$3GROPMby421O;iw2VT8?*FFpA&yV`OFl=P~g`{3^n_G?Q!lq zN^3yK0MeFK9C?Qe!vyd=D*DUO;#r3bo55iyKOt?l=S?M7PL)k$1nmH`Fag zoCyX}2=CvEYkIDap05DZ8xr(jE|EwY^!g>h>(~Tjx{Iok3ApyW0%98c#rJYV9vKno zRNa7B{GI81)x=KUhjA)5z|0%(z)Y!7@OoYGmRyA6f~kb1wuQP4K&+MJ(R>tALHqeP zIB-#AvK}{mAiqdhh{2&0@L4p`Co5crO8E> z$8-DM7oli1j=l@$q-b=K3(H{j!-+ldKR!b?-rGQyE_ibWtaY2pVP~`1Iu<7PkZ(PZXQP-dj`*;V zSMhoodM?$NB<&j}O8F7|d*otyb_@t}M;#WviTD<>_vHuRuv1TA0MZHgqWqG`C!%@+ zR-PmTFSh(`@7lMw(v2K7J9dbCoQMwpEboa`v~ybC0FRBX&+p7DJHPK3`KPz!<08#+ zf?XSRy&|%P(83~2dmLn>x3y=bf63$8yjAn4WsSH}Tak!B?w52eSLNL(L#hfw(u|6L zVd#g5MxI0a*_O@$qI8d9P!!;U@d-vEqv4=4=aeenicndXXNd3W+IC+D<(_?-Z@Ugx zfu2U93LOu3zMpcL?wQ;uLN2;mKZ-^O9v>J6!8N`;v?!=t6>Vi9X zJ2yeF7>t)9ENT$`F4qzWFZy%CAi2?YI7X0M`Z&t87Z9?25SyxoKOIU#PWIbnkcG9dm-xN4# zqZiE4%iWr(+^mUXDs&z%T=IAfMyO4(c9BX$N=W;qihBrFX>BdL2UJoqV326ZE*;Lr zfSCpYp9A#`Q@9oP@rwpRpX14db?sI?e}6n=Rrr3~9qN~iPmBIOhQe-2a;DYXTh#^* zybZb1N=O0?hhNH+NPn8;-xPZ@9VDa7;Cw zAK9pqj|lr#NM@LnjWM$%dQJ19i67Z45LXDDH*)Gu9p9)srHwB12Rj(nT}{a zC*6iu;cP5dqrr8(0f3VXPyHMLRPk@*el$}wvtX6Qvj0%nPUPGU7m-*_f@OamFcf7L zzJ!k6S}A!=JwmrSI)lBeI)mMj_x0Qc%QMF}E*}bh1acTgXN6Z;mV{On=d(MqF29r$ z%r_ALpzJSNitWYNF+VCkBVJQlGCY#NRTEjSMOeVtVl9L78TO;y}di-0kZiCHFaZfL)P9lW;%f za0L-u!Iyy6ZQ&$-msgHPQI^+JpqG({1x{ZRpQ$qN`YHQ zIZp*m5a*P^Se!KZj+$Tn)=?hEO(T8O^HsmHzf864Y7a(WGZ_}*Aaz~qsAwI6`s7qNFDJ(~qs8nAYhR1CInyK{b^WwiiAjK;qpGU{QG z0^w;%U!_P?1hZgOLXX(ygE%JfQ)%LJKzptl+ej%kfyVWIKaD6sEVr*sl{BhXJ>U{I zjmd*-*=K%gTynj&TucIviqFl5w*@JJ{(%c zNXcqD?_K9D2jL~=0FBs^Pcdq7C=kGmJ;{(o*7$AW7HEjxeUb(^0U{~#o9o@-cj$}F z{$eb6fuQp3V6Plk7}!7x$CeF*4ouqyABv=-lU%rr*YycEjWeVPH=0;(C>AHosrPp} zoo4-sjiH2h2uE7Fo9?<)8s+HJ1Y;pzYgJ7KpVg+gbHx8tTG-{0wpsky;JSbNZmJP0 zGe&tSTitOl9;qzq;WMWFTX;Uxj7{D(!c;x?nmELnhBg#pw1>@5m2+;lf`R0EzxeZ; zNE%X81NVVS$jWQ^8;!7vi_N_qnXO)rRu_g&euageNvxve3iHCPzC@aMJn@WQ%qvym z@iL1V$@ZNZRGe5C)8&$zSuKN!12G(SvupVj(>uzZz&p^SGxQQEu?gv&?Y?a{c#sp% zXTSx$9Ffc&@Rvt?M^YvglF5%o$VWiG+;y3hlBnGeN|Ns+Wq@xK?~_KzPE1h~Qk;+_ zjc{&}C!Lmrg>K!j$GHr(j^^Gaw@fce1Q=?17gTmh)R2d#W8USSZ%u+vv2ZU#>`VxQ0uWZu5s8VqwCq{&s6N0eFyB^0MJ#O;YD&C38 zlF}@KTJ_V^(t!U@)1qW8QPoCLrJ?tB`22)ww?AhVlS{ENaXI zlD%g}Q;2WdDm9f=)~_7&!p_ zmXl1BgXtAC-duo2C%_7; zu1i1wk7w0MM?uLu*sF0%1&K=o;k4dj)4PKiY_!2@2*&q6%6Z`Vg}A)@(%NXme9CAj z(Ps}q>!1X8Id@LmM#691U<`B`L+ta;sZO=2sL6Y&?kHG#_a#4Q+|J`DY1na2>Io^6 z{Za8taN@o}u0s+>#0N@?R8i?95meK?zKvXpur#&I`fU<<23bS}lYK^o39`&dDsB1t ziuKlNpX+*2vLX8nk3O_CiDoJ__Sk2OoPIqaG9ozaNO8hYB7vfhKQ%L=jy#aK5fw{T zrRF-uS?eaeey)-zOvf-ZRl*x zRlRA+eBt4!Pe$>|eye(`{ve*zHsS3{8aA&mj=iyom;H?;vLV#%g^%xtxrv5@>%jzK zna<0DiQJ`~xCM7)B9oR{o?(cv5#taZ?-Zw1bTOz({&wlp7Il$k@AizHPrZobHxYNi ze(7t7=Ns9#m>;VGpVJy{LC^aO_YH>=ygSOPztcE)#8yCshMnv@2|xm0`^nc&OWViU zpRE6+H2uzvnUwIV30PX|dwcxu%N!=PU3QCOV zvsR}Cp=_Hb`l}|&MVk|J4jZ#`+X}Sq68$OYc!Ihi4z^EAm^SRXFVPbFDH^3?2 zZe`8aiGOj-dTsRdY{j=CSJ16I_bfN7b^bUV24q|A=9JV_eriLu7DSWxf@NJGXq1BR zMaLwakd;NzLNI)qYf^h$LM@*hjDTJkx%u@1%lo}t1>CncWqB1r5UXQ|tjXaNDaiOKJ{f%WcJnvNEKJAWXVw#F#*1#|c}g2EGuO{io>$cj&(P)^U$ww!|IQ zvyWva7fOp|y*8I}8_ZWNtd=sjOW;pX-;UyEe%>g0=nKCt$vh?=%(-yX`1(MNY`Lz> znyQ(6cxagyYwBVu@O{zng(FWZ@!T&eThV{DpqfH#T!9i{)#cNlKamsXxj46g?&B~# zXcUJ`gu$-sIr(mBAsBSg6CUWzq;!eQ9_YNxx%__VOzl<@jxzqHvL40kJ2p@!lk=A=K!p2YV=#{I0dAb*Qz3PzAIyF>K6YyksGHA%+e#Gl3ZxR=CrEKJ_Nu z>Lk~7l+%jyKJ#HQ&fW<{w$HU_IVb`e>AceB=X6mIjCpT;vvpLu?qR1Trk;21bI%*xU{x%TOD&tRS|J z111C#G+z`YNQoBCKL~zF-=Kc9f3SDEG$(>9HArseX*3t5#*I-SvuuMMF70iCrh6HD zNW$c=ZE|TxeT>s{tg5}=;?1bh8hF0=5^rU+!M~IGu5I$0K8QUb0j)guQhycpn(4k7 zpSkI=DGYux;oXX(%7A{k>g;T|mFfvKTil{pqqu&fakaRuUhJXk=%C@mCA{B!wdu!R znX66XF8iU4P3*Zue;$+SUBf$r4S(QiO*@01QNx#3AoTsRPm$mxfKad3?Y^m9`P0QP zFU@UUsk}T37`2_~k{KKEti85x>DbGE96N1ncIu!u%)jPZ%c+H7=&G?fi%6J-|42P(mziV8_$q6lp`rD2)2L6@47O zi^?N?a!b4D;ngof4k~LrsK=jN%BRar=j!&pF3HW+dG;->F3VB{L&v4o3~nj@jK#q+ zk7n;fP1@9=PIDyH&1tFIR|%-p5z9_h6|JYrg!sbb$j#u{i|~>jzFY z3trV5pbX-RrP_ftuBl3fsNAe|wpwZ=9zj&uti^}*j{LR|+`5_&k0)%747ec=rTon% zf%}7AOP6|q#`itVq&wG{@zWNZ*}l*OX|0a@eEhJ|=^0S2ja5%=o+bHlANiQ}EGx=8 zbOS55zIfHK|8i0z<}>UX2-#&>vyvOJ-Q<1A$Y4yX3 GWNl$9j`8eyMDz{;@s7`3o_ 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 literal 0 HcmV?d00001 diff --git a/main/docs/images/universal-components/my-account/ios/my-account-auth-methods-view.png b/main/docs/images/universal-components/my-account/ios/my-account-auth-methods-view.png new file mode 100644 index 0000000000000000000000000000000000000000..ae33ca3a9e06c1e4280a66b8dd575227f9acf351 GIT binary patch literal 151933 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 IcdFi5M5`QZi-yf__Q1 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 RyusNm1sPT8iua~L{{vS9>?Z&K literal 0 HcmV?d00001 diff --git a/main/docs/images/universal-components/my-account/ios/passkey-enrollment.png b/main/docs/images/universal-components/my-account/ios/passkey-enrollment.png new file mode 100644 index 0000000000000000000000000000000000000000..e146a0d886d4642c206aca7bc60293f0e7bc267f GIT binary patch literal 157295 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 rT@ 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

@(T&1(n0cX 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 literal 0 HcmV?d00001 From e541e4a57fb137065ea65380213fed0d28a069d1 Mon Sep 17 00:00:00 2001 From: Suraj Thotakura Date: Thu, 4 Jun 2026 18:10:43 +0530 Subject: [PATCH 42/50] fix: update the beta message and add rate limit callout --- .../android/android-overview.mdx | 11 +++-------- .../android/android-theming.mdx | 11 +++-------- .../components/auth-methods-management.mdx | 11 +++-------- .../android/components/factors/passkeys.mdx | 11 +++-------- .../android/components/my-account-overview.mdx | 15 +++++++-------- .../ios/components/auth-methods-management.mdx | 11 +++-------- .../ios/components/factors/passkeys.mdx | 11 +++-------- .../ios/components/my-account-overview.mdx | 14 ++++++-------- .../universal-components/ios/ios-overview.mdx | 11 +++-------- .../universal-components/ios/ios-theming.mdx | 11 +++-------- 10 files changed, 37 insertions(+), 80 deletions(-) diff --git a/main/docs/get-started/universal-components/android/android-overview.mdx b/main/docs/get-started/universal-components/android/android-overview.mdx index b8a6e18597..1289401344 100644 --- a/main/docs/get-started/universal-components/android/android-overview.mdx +++ b/main/docs/get-started/universal-components/android/android-overview.mdx @@ -4,14 +4,9 @@ description: Learn how to install and configure Auth0 Universal Components for A sidebarTitle: Install and Configure Universal Components --- -import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" - - + +Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). + The Auth0 [Universal Components for Android](https://github.com/auth0/ui-components-android) SDK provides pre-built, embeddable UI for Auth0 identity flows using [Jetpack Compose](https://developer.android.com/compose). diff --git a/main/docs/get-started/universal-components/android/android-theming.mdx b/main/docs/get-started/universal-components/android/android-theming.mdx index dcfdf82e82..edd9afead8 100644 --- a/main/docs/get-started/universal-components/android/android-theming.mdx +++ b/main/docs/get-started/universal-components/android/android-theming.mdx @@ -4,14 +4,9 @@ description: Learn how to customize style and themes for Universal Components on sidebarTitle: Customize Style and Themes --- -import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" - - + +Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). + Auth0 [Universal Components for Android](https://github.com/auth0/ui-components-android) use a design token model. Visual properties such as colors, typography, spacing, corner radii, and component sizes are each expressed as a token that you can override without changes to your layouts. diff --git a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx index 1072765388..abdc2c3dfd 100644 --- a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx @@ -4,14 +4,9 @@ description: Render a full-screen UI that lets users enroll, review, and remove sidebarTitle: AuthenticatorSettingsComponent --- -import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" - - + +Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). + The Universal Components for Android SDK includes the `AuthenticatorSettingsComponent`, a Jetpack Compose composable that handles every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). diff --git a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx index ecbf6ac691..5072883df4 100644 --- a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx @@ -4,14 +4,9 @@ description: Learn about the SDK-specific behavior, application-side entitlement sidebarTitle: Passkeys --- -import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" - - + +Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). + The [`AuthenticatorSettingsComponent`](/docs/get-started/universal-components/android/components/auth-methods-management) can render the Auth0 [passkey](/docs/authenticate/database-connections/passkeys) enrollment flow. diff --git a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx index 037c37557f..108c97a8f7 100644 --- a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx @@ -4,14 +4,13 @@ description: "Describes how to use Universal Components to build self-service ac sidebarTitle: Build Account Security UI --- -import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" - - + +Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). + + + +The My Account API currently enforces low rate limits, especially on free-tier tenants. This may cause errors while using these components. + Auth0 Universal Components for Android allow you to build a self-service account security UI within your [native Android application](/docs/get-started/auth0-overview/create-applications#create-application-in-auth0). diff --git a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx index 73abda40e2..0f78e63b3f 100644 --- a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx @@ -4,14 +4,9 @@ description: Render a full-screen UI that lets users enroll, review, and remove sidebarTitle: MyAccountAuthMethodsView component --- -import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" - - + +Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). + The Universal Components for iOS SDK includes the `MyAccountAuthMethodsView` component, a SwiftUI view that handles every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). diff --git a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx index 225826d9c3..870e7b9c0c 100644 --- a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx @@ -4,14 +4,9 @@ description: Learn about the SDK-specific behavior, application-side entitlement sidebarTitle: Passkeys --- -import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" - - + +Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). + The [`MyAccountAuthMethodsView`](/docs/get-started/universal-components/ios/components/auth-methods-management) component can render the Auth0 [passkey](/docs/authenticate/database-connections/passkeys) enrollment flow. diff --git a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx index cc1ffe0396..bd5065c0d1 100644 --- a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx @@ -4,14 +4,13 @@ description: "Describes how to use Universal Components to build self-service ac sidebarTitle: Build Account Security UI --- -import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + +Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). + - + +The My Account API currently enforces low rate limits, especially on free-tier tenants. This may cause errors while using these components. + Auth0 Universal Components for iOS allow you to build a self-service account security UI within your [native iOS application](/docs/get-started/auth0-overview/create-applications#create-application-in-auth0). @@ -31,7 +30,6 @@ The `MyAccountAuthMethodsView` component uses the access token to call the My Ac * For **delegated admin** interfaces in which a user manages an Auth0 Organization, read [Build a Delegated Admin Interface](/docs/get-started/universal-components/web/components/build-delegated-admin). - ## Prerequisites ### Enable Auth0 My Account API diff --git a/main/docs/get-started/universal-components/ios/ios-overview.mdx b/main/docs/get-started/universal-components/ios/ios-overview.mdx index d9cecae3c5..507343010f 100644 --- a/main/docs/get-started/universal-components/ios/ios-overview.mdx +++ b/main/docs/get-started/universal-components/ios/ios-overview.mdx @@ -4,14 +4,9 @@ description: Learn how to install and configure Auth0 Universal Components for i sidebarTitle: Install and Configure Universal Components --- -import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" - - + +Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). + The Auth0 [Universal Components for iOS](https://github.com/auth0/ui-components-ios) SDK provides pre-built, embeddable UI for Auth0 identity flows using [SwiftUI](https://developer.apple.com/swiftui). diff --git a/main/docs/get-started/universal-components/ios/ios-theming.mdx b/main/docs/get-started/universal-components/ios/ios-theming.mdx index 27b7acf345..f9f70946dd 100644 --- a/main/docs/get-started/universal-components/ios/ios-theming.mdx +++ b/main/docs/get-started/universal-components/ios/ios-theming.mdx @@ -4,14 +4,9 @@ description: Learn how to customize style and themes for Universal Components on sidebarTitle: Customize Style and Themes --- -import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" - - + +Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). + Auth0 [Universal Components for iOS](https://github.com/auth0/ui-components-ios) use a design token model. Visual properties such as colors, typography, spacing, corner radii, and component sizes are each expressed as a token that you can override without changes to your layouts. From 4b91da7555e052b878b129638ed5255cb5575055 Mon Sep 17 00:00:00 2001 From: Suraj Thotakura Date: Thu, 4 Jun 2026 19:20:02 +0530 Subject: [PATCH 43/50] fix: address Android docs PR feedback from pacific-ring MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Replace non-existent color tokens (textSubtle, textOnInverse, textError, textSuccess, textAccent) with actual Auth0Color properties (textDisabled, textOnSuccess, textOnError) - Remove spacingXxxl from dimensions table (not in Auth0Dimensions) - Fix Auth0Sizes defaults: buttonHeight 48→56, inputHeight 60→68, iconLarge 28→32, rename otpCellWidth/Height to otpFieldWidth/Height, add missing codeContainerHeight, padding, and paddingLarge tokens - Reword sample app description in android-overview for clarity - Add optional passkeyConfiguration parameter to initialize() snippet - Remove incorrect "uc_" prefix from localization example (actual key is continue_button) - Change passkeys API level range from 28–33 to 30–33 (SDK minSdk is 30) --- .../android/android-overview.mdx | 2 +- .../android/android-theming.mdx | 18 ++++++++++-------- .../components/auth-methods-management.mdx | 2 +- .../android/components/factors/passkeys.mdx | 2 +- .../android/components/my-account-overview.mdx | 3 ++- 5 files changed, 15 insertions(+), 12 deletions(-) diff --git a/main/docs/get-started/universal-components/android/android-overview.mdx b/main/docs/get-started/universal-components/android/android-overview.mdx index 1289401344..e957ffe317 100644 --- a/main/docs/get-started/universal-components/android/android-overview.mdx +++ b/main/docs/get-started/universal-components/android/android-overview.mdx @@ -80,7 +80,7 @@ To verify the Universal Components for Android SDK installation, confirm the dep You can review the sample application of the [Universal Component for Android](https://github.com/auth0/ui-components-android#run-the-sample-app) SDK on GitHub. -The sample application includes `MainActivity.kt` and the `LoginSecurityScreen.kt` files for SDK initialization and rendering of the `AuthenticatorSettingsComponent`. +The sample includes `MainActivity.kt`, which initializes the SDK via `Auth0UniversalComponents.initialize()`, and `LoginSecurityScreen.kt`, which renders the `AuthenticatorSettingsComponent`. ## Next steps diff --git a/main/docs/get-started/universal-components/android/android-theming.mdx b/main/docs/get-started/universal-components/android/android-theming.mdx index edd9afead8..3f19ab630d 100644 --- a/main/docs/get-started/universal-components/android/android-theming.mdx +++ b/main/docs/get-started/universal-components/android/android-theming.mdx @@ -178,8 +178,8 @@ To customize colors use `Auth0Color.light()` and `Auth0Color.dark()` factories a | `backgroundLayerTop`, `backgroundLayerMedium`, `backgroundLayerBase` | Overlay, card, and app-background layers | | `backgroundError`, `backgroundErrorSubtle`, `backgroundSuccess`, `backgroundSuccessSubtle` | Feedback surfaces | | `borderBold`, `borderDefault`, `borderSubtle`, `borderShadow` | Emphasis and elevation borders | -| `textBold`, `textDefault`, `textSubtle` | Heading, body, and caption text | -| `textOnPrimary`, `textOnInverse`, `textError`, `textSuccess`, `textAccent` | Text on colored surfaces | +| `textBold`, `textDefault`, `textDisabled` | Heading, body, and disabled text | +| `textOnPrimary`, `textOnSuccess`, `textOnError` | Text on colored surfaces | @@ -218,7 +218,6 @@ Spacing defaults to a `4 dp` grid. Access spacing tokens with `Auth0Theme.dimens | `spacingLg` | 24 dp | Larger padding for major sections | | `spacingXl` | 32 dp | Extra-large padding | | `spacingXxl` | 48 dp | Double-extra-large padding | -| `spacingXxxl` | 56 dp | Triple-extra-large padding | @@ -227,13 +226,16 @@ Access component dimensions with `Auth0Theme.sizes.*`. | **Token** | **Default** | **Usage** | |-----------|-------------|-----------| -| `buttonHeight` | 48 dp | All primary and secondary action buttons | -| `inputHeight` | 60 dp | Text and phone-number input fields | +| `buttonHeight` | 56 dp | All primary and secondary action buttons | +| `inputHeight` | 68 dp | Text and phone-number input fields | +| `otpFieldWidth` | 52 dp | Width of a single OTP digit input field | +| `otpFieldHeight` | 60 dp | Height of a single OTP digit input field | +| `codeContainerHeight` | 56 dp | Recovery code display containers | | `iconSmall` | 16 dp | Small icons—chevrons, info indicators, checkmarks | | `iconMedium` | 24 dp | Standard icons—authentication-method images | -| `iconLarge` | 28 dp | Large icons—three-dots menu | -| `otpCellWidth` | 48 dp | Width of a single character-input cell | -| `otpCellHeight` | 56 dp | Height of a single character-input cell | +| `iconLarge` | 32 dp | Large icons—three-dots menu | +| `padding` | 16 dp | Default component padding | +| `paddingLarge` | 24 dp | Larger component padding | ## Learn more diff --git a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx index abdc2c3dfd..2a22b02299 100644 --- a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx @@ -90,7 +90,7 @@ All user-facing strings live in the SDK's `values/strings.xml` file. You can ove ```xml - Next + Next ``` diff --git a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx index 5072883df4..baadf3a2a3 100644 --- a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx @@ -27,7 +27,7 @@ To enable passkey support in the Universal Components for Android SDK: * **Install and configure Universal Components for Android**. To install Universal Components, configure your Auth0 tenant, and initialize the SDK, read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview). Set `PasskeyConfiguration` on the SDK initializer if your integration needs a specific connection or linked identity. -* **Confirm Android version**. Passkeys require Android **14+** (API 34+) for the full Credential Manager experience. On Android **9–13** (API 28–33), passkeys sync through Google Password Manager on devices with up-to-date Play Services. The component hides the passkey option for Android API 28 and below. +* **Confirm Android version**. Passkeys require Android **14+** (API 34+) for the full Credential Manager experience. On Android **11–13** (API 30–33), passkeys sync through Google Password Manager on devices with up-to-date Play Services. * **Register your Android application package and SHA-256 signing fingerprints**. To learn more, read [Enable Android App Links Support](/docs/get-started/applications/enable-android-app-links-support). diff --git a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx index 108c97a8f7..2d0b6b57e0 100644 --- a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx @@ -103,7 +103,8 @@ class MainActivity : ComponentActivity() { context = applicationContext, account = account, tokenProvider = DefaultTokenProvider(credentialsManager), - scheme = getString(R.string.com_auth0_scheme) + scheme = getString(R.string.com_auth0_scheme), + passkeyConfiguration = PasskeyConfiguration() ) setContent { MyApp() } From 6ae163684ebf88c5abb6c8e3f785bb27afa175cd Mon Sep 17 00:00:00 2001 From: Suraj Thotakura Date: Mon, 8 Jun 2026 18:41:15 +0530 Subject: [PATCH 44/50] fix: address iOS passkey docs PR feedback - Add AASA file prereqs (custom domain, Team ID/Bundle ID setup, Passkey grant) - Replace misleading Universal Links bullet with Native Passkeys link - Add Xcode associated-domains case-sensitivity warning - Add dev-mode callouts (?mode=developer, device toggle, simulator caveat) - Remove duplicate post-login passkeys warning in auth-methods-management.mdx --- .../ios/components/auth-methods-management.mdx | 1 - .../ios/components/factors/passkeys.mdx | 15 +++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx index 0f78e63b3f..3172997bc0 100644 --- a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx @@ -123,7 +123,6 @@ If localization is a blocker for your integration, please submit a feature reque * **No standalone factor components on iOS**. Every factor renders inside the Authentication Methods Management component. There is no public API to enroll, verify, or remove a single factor from a different part of your application. * **No standalone list/remove components**. The SDK does not ship public components for listing enrolled factors or removing them outside the component. Use the Authentication Methods Management component for the full management experience. -* **Post-login passkey prompts are not supported**. Prompting a user to save a passkey immediately after sign-in (separate from the settings screen) is not covered by this SDK today. You can track [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) for updates. ## Learn more diff --git a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx index 870e7b9c0c..6e51f902ab 100644 --- a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx @@ -22,20 +22,21 @@ Unlike other factors, passkeys require application-side platform entitlements th To enable passkey support in the Universal Components for iOS SDK: +* **Configure a custom domain on your Auth0 tenant**. Native passkeys require a [custom domain](/docs/customize/custom-domains), which serves the [Apple App Site Association (AASA)](https://developer.apple.com/documentation/xcode/supporting-associated-domains) file that binds passkey credentials to your application. -* **Enable passkeys on your Auth0 database connection**. To learn how to enable passkeys in your Auth0 tenant, read [Passkeys](/docs/authenticate/database-connections/passkeys/configure-passkey-policy). +* **Enable passkeys on your Auth0 database connection**. To learn how to enable passkeys in your Auth0 tenant, read [Configure Passkey Policy](/docs/authenticate/database-connections/passkeys/configure-passkey-policy). + +* **Register your Apple Team ID and Bundle ID in your Auth0 application**. In the [Auth0 Dashboard](https://manage.auth0.com/#/applications), open your application and go to **Settings → Advanced Settings → Device Settings**, then complete the **iOS** section. Enable the **Passkey** grant type under the **Grant Types** tab. Auth0 uses these values to publish the AASA file at your custom domain. To learn more, read [Native Passkeys for Mobile Applications](/docs/authenticate/database-connections/passkeys/native-passkeys-for-mobile-applications#configure-auth0-dashboard). * **Install and configure Universal Components for iOS**. To install Universal Components, configure your Auth0 tenant, and initialize the SDK, read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview). * **Confirm OS version**. Passkeys are supported on devices running **iOS 16.6+**, **macOS 13.5+**, or **visionOS 1.0+**. -* **Register your Apple bundle identifier in your native application**. To learn more, read [Enable Universal Links Support in Apple Xcode](/docs/get-started/applications/enable-universal-links-support-in-apple-xcode#obtain-apple-team-id-and-bundle-identifier). - ## Platform setup ### Add the associated domain in Xcode -Passkeys bind credentials to your Auth0 tenant's [custom domain](/docs/customize/custom-domains). Add your custom domain to your application: +After registering your Apple Team ID and Bundle ID in your Auth0 application's Device Settings, Auth0 serves the AASA file from your custom domain. Add your Auth0 custom domain to the application: 1. Open [**Xcode**](https://developer.apple.com/documentation/xcode). 2. Select your target's **Signing & Capabilities**. @@ -46,6 +47,12 @@ Passkeys bind credentials to your Auth0 tenant's [custom domain](/docs/customize webcredentials:YOUR_AUTH0_DOMAIN ``` +5. Confirm that **Signing & Capabilities → Team** matches the Apple Team ID you registered in your Auth0 application's Device Settings, and that the target's **Bundle Identifier** matches the registered Bundle ID exactly. iOS performs a case-sensitive byte-for-byte match — for example, `com.example.OAuth2` is not the same as `com.example.oauth2`. + + +**During development**, Apple's CDN can cache stale AASA files for hours after you change Device Settings. To fetch the AASA directly from your tenant during development, append `?mode=developer` to the entitlement (for example, `webcredentials:YOUR_AUTH0_DOMAIN?mode=developer`) and enable **Settings → Developer → Associated Domains Development** on the device. Test on a physical device — the iOS Simulator does not reliably honor associated-domain configuration. Remove the `?mode=developer` suffix before shipping a release build. + + ## SDK limitations * **Passkeys can only be enrolled from inside the `MyAccountAuthMethodsView` component**. There is no public SwiftUI API to trigger a standalone passkey enrollment from elsewhere in your application. Post-login "save a passkey" upsell prompts are not supported. You can track [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) for updates. From 7c31cf7d8c796c55ef114a6ef5c9280d5a613511 Mon Sep 17 00:00:00 2001 From: Suraj Thotakura Date: Tue, 9 Jun 2026 16:55:23 +0530 Subject: [PATCH 45/50] fix: change the scope of the unizersal-components-overview.mdx to inclued new ios and android SDKs --- .../navigation/universal-components.json | 1 + .../universal-components-overview.mdx | 367 ++--------------- .../web/components/configure-org-domains.mdx | 4 +- .../components/edit-organization-details.mdx | 4 +- .../web/components/sso-provider-create.mdx | 4 +- .../web/components/sso-provider-edit.mdx | 4 +- .../web/components/sso-provider-table.mdx | 4 +- .../universal-components/web/web-overview.mdx | 370 ++++++++++++++++++ 8 files changed, 406 insertions(+), 352 deletions(-) create mode 100644 main/docs/get-started/universal-components/web/web-overview.mdx diff --git a/main/config/navigation/universal-components.json b/main/config/navigation/universal-components.json index 4a26b0176e..e39e05c905 100644 --- a/main/config/navigation/universal-components.json +++ b/main/config/navigation/universal-components.json @@ -10,6 +10,7 @@ "group": "Web Components", "icon": "globe", "pages": [ + "docs/get-started/universal-components/web/web-overview", "docs/get-started/universal-components/web/auth0-component-provider", "docs/get-started/universal-components/web/universal-components-style", { diff --git a/main/docs/get-started/universal-components/universal-components-overview.mdx b/main/docs/get-started/universal-components/universal-components-overview.mdx index 3a477917bb..7be37d5d0c 100644 --- a/main/docs/get-started/universal-components/universal-components-overview.mdx +++ b/main/docs/get-started/universal-components/universal-components-overview.mdx @@ -1,17 +1,14 @@ --- title: Auth0 Universal Components -description: Learn how to install and configure Auth0 Universal Components. +description: Learn what Auth0 Universal Components are and choose a platform to get started. sidebarTitle: Auth0 Universal Components --- - Auth0 Universal Components is currently in Early Access. By using it, you - agree to the applicable Free Trial terms in [Okta's Master Subscription - Agreement](https://www.okta.com/agreements/). To learn more, read [Product - Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). +Auth0 Universal Components are currently being released in stages. **Web components (My Organization)** are in Early Access. **iOS and Android components (My Account)** are in Beta. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). -Auth0 Universal Components is a library of pre-built UI components you can leverage to build your identity pipeline and experience inside your application. Built on [Auth0 SDKs](/docs/libraries) with an API-first approach, Universal Components allows you to embed Auth0's services, such as authentication flows, Organization management, and MFA enrollment, without building the UI manually or managing high-privilege backend proxies. +Auth0 Universal Components is a library of pre-built UI components you can leverage to build your identity pipeline and experience inside your web and native applications. Built on [Auth0 SDKs](/docs/libraries) with an API-first approach, Universal Components allows you to embed Auth0's services, such as Organization management and MFA enrollment, without building the UI manually or managing high-privilege backend proxies. With Universal Components, you can: @@ -25,351 +22,37 @@ With Universal Components, you can: Universal Components acts as the presentation layer between your application and Auth0, coordinating communication between your application, the [My Account](/docs/manage-users/my-account-api) and [My Organization](/docs/api/myorganization) APIs, and Auth0 SDKs. -Auth0 SDKs function as the logic, handling authentication flows, token exchange, and session managment. The My Account API provides self-service capabilities for authenticated users to manage their authentication experience. For example, authenticated users can choose their own authentication methods, such as MFA or passkeys. The My Organization API provides a secure, Organization-scoped interface that allows your business customers to manage their own Organizations within your Auth0 tenant. This API serves as the technical backbone for embedded delegated administration and API-first integrations. +Auth0 SDKs function as the logic, handling authentication flows, token exchange, and session management. The My Account API provides self-service capabilities for authenticated users to manage their authentication experience. For example, authenticated users can choose their own authentication methods, such as MFA or passkeys. The My Organization API provides a secure, Organization-scoped interface that allows your business customers to manage their own Organizations within your Auth0 tenant. This API serves as the technical backbone for embedded delegated administration and API-first integrations. -Universal Components leverages [Shadcn](https://ui.shadcn.com/docs/components) components and [Tailwind CSS](https://tailwindcss.com/docs/installation/using-vite) stylesheets to customize components to fit your own branding and themes. +Each platform styles components with its own native design system, so you can match Universal Components to your brand without changing your layouts. -## Prerequisites - -To use Auth0 Universal Components: - -- You must [have an Auth0 account](https://auth0.com) and configure an Auth0 tenant with the My Account and My Organization APIs enabled -- [Register your Auth0 application](/docs/get-started/auth0-overview/create-applications). If you do not have an Auth0 application, you can get started with the Auth0 React or Next.js [Quickstarts](https://auth0.com/docs/quickstart/spa/react). -- Install [Shadcn UI](https://ui.shadcn.com/docs/installation) to build the Universal Component library -- Install [Tailwinds CSS v.3](https://tailwindcss.com/docs/installation) to style components for your brand -- For client-side authentication, install **React v.16.11+**. -- For server-side authentication, install **Next.js v.13+**. - - - -## Install Universal Components - - -```bash npm -npm install @auth0/universal-components-react react-hook-form @auth0/auth0-react -``` - -```bash pnpm -pnpm add @auth0/universal-components-react react-hook-form @auth0/auth0-react -``` - - -Installs the package with required peer dependencies (`react-hook-form` and `@auth0/auth0-react`). - - - -## Configure your application - -1. Wrap your application with `Auth0Provider` and `Auth0ComponentProvider`: - -```tsx App.tsx -import { Auth0Provider } from "@auth0/auth0-react"; -import { Auth0ComponentProvider } from "@auth0/universal-components-react/spa"; -import "@auth0/universal-components-react/styles"; - -const domain = import.meta.env.VITE_AUTH0_DOMAIN; - -function App() { - return ( - - - {/* Your app components */} - - - ); -} -``` - -2. Import Universal Components: - -```tsx OrganizationManagementPage.tsx -import { useAuth0 } from "@auth0/auth0-react"; -import { OrganizationDetailsEdit } from "@auth0/universal-components-react"; - -function OrganizationManagementPage() { - const { isAuthenticated, isLoading } = useAuth0(); - - if (isLoading) return

; - if (!isAuthenticated) return
Please log in
; - - return ( -
- -
- ); -} -``` - -## Configure Universal Components - -The `Auth0ComponentProvider` manages authentication, caching, internationalization, and toast notifications for all components. - -```tsx App.tsx - - {/* Your app components */} - -``` - -## Style components - - - The stylesheet you imported (`@auth0/universal-components-react/styles`) - enables all component styles. If you're using Tailwind v4, add `@import - "@auth0/universal-components-react/tailwind"` to your CSS file. - - -Use CSS variables to customize your branding: - -```css -:root { - --primary: #4f46e5; /* your brand color */ - --primary-foreground: #ffffff; /* text on buttons */ -} -``` - -To learn more, read [Style Universal Components](/docs/get-started/universal-components/web/universal-components-style). - - - - -## Install Universal Components - - - You do not need `@auth0/auth0-react`. The Next.js implementation uses proxy - mode with server-side authentication. - - - -```bash npm -npm install @auth0/universal-components-react react-hook-form -``` - -```bash pnpm -pnpm add @auth0/universal-components-react react-hook-form -``` - - - -## Configure your application - -1. Wrap your application with `Auth0Provider` and `Auth0ComponentProvider`: - -In your `/root` layout, add the `Auth0ComponentProvider` in proxy mode: - -```tsx layout.tsx -import { Auth0ComponentProvider } from "@auth0/universal-components-react/rwa"; -import "@auth0/universal-components-react/styles"; - -export default function RootLayout({ children }) { - return ( - - - - {children} - - - - ); -} -``` - -2. Import Universal Components: - -```tsx page.tsx -import { OrganizationDetailsEdit } from "@auth0/universal-components-react"; +## Choose your platform -export default function OrganizationManagementPage() { - return ( -
- -
- ); -} -``` +Universal Components are organized by the Auth0 API they target: -## Configure Universal Components +- **Web** components use the [My Organization API](/docs/api/myorganization) to build **delegated administration** interfaces, where your business customers manage their own Organizations, domains, and SSO providers. They run on React, Next.js, and shadcn. +- **iOS** and **Android** components use the [My Account API](/docs/manage-users/my-account-api) to build **end-user self-service** interfaces, where users manage their own authentication methods—MFA factors, passkeys, and recovery codes—inside your native application. -The `Auth0ComponentProvider` manages authentication, caching, internationalization, and toast notifications for all components. In Next.js, use proxy mode for server-side authentication. - -```tsx layout.tsx - - {/* Your app components */} - -``` - -## Style components - - - The stylesheet you imported (`@auth0/universal-components-react/styles`) - enables all component styles. If you're using Tailwind v4, add `@import - "@auth0/universal-components-react/tailwind"` to your CSS file. - - -Use CSS variables to customize your branding: - -```css -:root { - --primary: #4f46e5; /* your brand color */ - --primary-foreground: #ffffff; /* text on buttons */ -} -``` - -To learn more, read [Style Universal Components](/docs/get-started/universal-components/web/universal-components-style). - -
- - - -## Install Universal Components - -Universal Components use `@/...` imports. Start by configuring the path alias and project dependencies: - -```bash -npx shadcn@latest init -``` - -Next, install Universal Components individually via the Shadcn CLI. For example: - -```bash -npx shadcn@latest add @auth0/organization-details-edit -``` - - - Shadcn CLI installs the component source code and the - `@auth0/universal-components-core` dependency for shared utilities and Auth0 - integration. - - -## Configure your application - -1. Wrap your application with `Auth0Provider` and `Auth0ComponentProvider`: - -```tsx App.tsx -import { Auth0Provider } from "@auth0/auth0-react"; -import { Auth0ComponentProvider } from "@auth0/universal-components-react/spa"; - -const domain = import.meta.env.VITE_AUTH0_DOMAIN; - -function App() { - return ( - - - {/* Your app components */} - - - ); -} -``` - -2. Import Universal Components: - -```tsx OrganizationManagementPage.tsx -import { OrganizationDetailsEdit } from "@/components/auth0/my-organization/organization-details-edit"; - -function OrganizationManagementPage() { - return ( -
- -
- ); -} -``` - -## Configure Universal Components - -The `Auth0ComponentProvider` manages authentication, caching, internationalization, and toast notifications for all components. - -```tsx App.tsx - - {/* Your app components */} - -``` - -## Style components - - - Styles for Shadcn are already included in your Tailwind build. No additional - style imports are needed. - - -Use CSS variables to customize your branding: - -```css -:root { - --primary: #4f46e5; /* your brand color */ - --primary-foreground: #ffffff; /* text on buttons */ -} -``` - -To learn more, read [Customize Style and Themes with Universal Components](/docs/get-started/universal-components/web/universal-components-style). - -
- - -## Example implementations - -See complete working examples in the sample applications. - - - React SPA (npm), React SPA (shadcn), and Next.js sample applications with full - implementation patterns - + + + Build delegated admin interfaces with the My Organization API using React, Next.js, or shadcn. + - - - See My Organization Components in action in the live reference B2B SaaS app + + Build self-service account security interfaces with the My Account API using SwiftUI. - - A secure and high-performance starting point for building modern B2B SaaS web applications. + + Build self-service account security interfaces with the My Account API using Jetpack Compose. -## Learn more +## Prerequisites + +To use Auth0 Universal Components: + +- [Have an Auth0 account](https://auth0.com) and a registered [Auth0 application](/docs/get-started/auth0-overview/create-applications). +- **For iOS and Android components**, enable the [My Account API](/docs/manage-users/my-account-api) on your tenant. Native components use this API to build end-user self-service interfaces for authentication methods. +- **For Web components**, enable the [My Organization API](/docs/api/myorganization) on your tenant. Web components use this API to build delegated administration interfaces. -- [Configure Auth0ComponentProvider](/docs/get-started/universal-components/web/auth0-component-provider) -- [Customize Style and Themes with Universal Components](/docs/get-started/universal-components/web/universal-components-style) +For platform-specific requirements and installation steps, follow the getting-started guide for your platform above. diff --git a/main/docs/get-started/universal-components/web/components/configure-org-domains.mdx b/main/docs/get-started/universal-components/web/components/configure-org-domains.mdx index 43a6ad0020..d3760d22c5 100644 --- a/main/docs/get-started/universal-components/web/components/configure-org-domains.mdx +++ b/main/docs/get-started/universal-components/web/components/configure-org-domains.mdx @@ -1,6 +1,6 @@ --- -title: Configure Verified Organization Domain -sidebarTitle: Configure Verified Domains +title: Configure Verified Domains on Web +sidebarTitle: DomainTable component description: Learn how to manage verified and pending Organization domains in a unified table interface. --- diff --git a/main/docs/get-started/universal-components/web/components/edit-organization-details.mdx b/main/docs/get-started/universal-components/web/components/edit-organization-details.mdx index a44bdb30a9..bad3eb89fb 100644 --- a/main/docs/get-started/universal-components/web/components/edit-organization-details.mdx +++ b/main/docs/get-started/universal-components/web/components/edit-organization-details.mdx @@ -1,6 +1,6 @@ --- -title: Organization Details Edit -sidebarTitle: Edit organization details +title: Edit Organization Details on Web +sidebarTitle: OrganizationDetailsEdit component description: Edit organization details including name, display name, branding colors, and logo. --- diff --git a/main/docs/get-started/universal-components/web/components/sso-provider-create.mdx b/main/docs/get-started/universal-components/web/components/sso-provider-create.mdx index 459a0bc3d0..ffbd62af6b 100644 --- a/main/docs/get-started/universal-components/web/components/sso-provider-create.mdx +++ b/main/docs/get-started/universal-components/web/components/sso-provider-create.mdx @@ -1,6 +1,6 @@ --- -title: SSO Provider Create -sidebarTitle: Create new SSO providers +title: Create SSO Providers on Web +sidebarTitle: SsoProviderCreate component description: Multi-step wizard for creating SSO providers with provider selection, details configuration, and authentication setup --- diff --git a/main/docs/get-started/universal-components/web/components/sso-provider-edit.mdx b/main/docs/get-started/universal-components/web/components/sso-provider-edit.mdx index a9d30b1f54..3363f9a93e 100644 --- a/main/docs/get-started/universal-components/web/components/sso-provider-edit.mdx +++ b/main/docs/get-started/universal-components/web/components/sso-provider-edit.mdx @@ -1,6 +1,6 @@ --- -title: SSO Provider Edit -sidebarTitle: Edit SSO providers +title: Edit SSO Providers on Web +sidebarTitle: SsoProviderEdit component description: "Tabbed interface for editing SSO providers: SSO settings, provisioning (SCIM), and domain management" --- diff --git a/main/docs/get-started/universal-components/web/components/sso-provider-table.mdx b/main/docs/get-started/universal-components/web/components/sso-provider-table.mdx index ee94dbad5d..f936806de6 100644 --- a/main/docs/get-started/universal-components/web/components/sso-provider-table.mdx +++ b/main/docs/get-started/universal-components/web/components/sso-provider-table.mdx @@ -1,6 +1,6 @@ --- -title: SSO Provider Table -sidebarTitle: List and configure SSO providers +title: List and Configure SSO Providers on Web +sidebarTitle: SsoProviderTable component description: Display and manage SSO identity providers in a table interface with create, edit, delete, and enable/disable capabilities. --- diff --git a/main/docs/get-started/universal-components/web/web-overview.mdx b/main/docs/get-started/universal-components/web/web-overview.mdx new file mode 100644 index 0000000000..0fe8d2dc93 --- /dev/null +++ b/main/docs/get-started/universal-components/web/web-overview.mdx @@ -0,0 +1,370 @@ +--- +title: Universal Components for Web Applications +description: Learn how to install and configure Auth0 Universal Components for web applications. +sidebarTitle: Install and Configure Universal Components +--- + + + Auth0 Universal Components is currently in Early Access. By using it, you + agree to the applicable Free Trial terms in [Okta's Master Subscription + Agreement](https://www.okta.com/agreements/). To learn more, read [Product + Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). + + +The Auth0 [Universal Components for Web](https://github.com/auth0/auth0-ui-components) library provides pre-built, embeddable UI for Auth0 identity flows using [React](https://react.dev/) and [Next.js](https://nextjs.org/). + +Universal Components for Web are built on top of the [Auth0 SDKs](/docs/libraries) and integrate with the [My Organization API](/docs/api/myorganization) to power embedded delegated administration, such as managing Organizations, domains, and SSO providers. + +## Prerequisites + +To use Auth0 Universal Components for Web: + +- You must [have an Auth0 account](https://auth0.com) and configure an Auth0 tenant with the My Organization API enabled. +- [Register your Auth0 application](/docs/get-started/auth0-overview/create-applications). If you do not have an Auth0 application, you can get started with the Auth0 React or Next.js [Quickstarts](https://auth0.com/docs/quickstart/spa/react). +- For client-side authentication, install **React v.16.11+**. +- For server-side authentication, install **Next.js v.13+**. + + + +## Install Universal Components + + +```bash npm +npm install @auth0/universal-components-react react-hook-form @auth0/auth0-react +``` + +```bash pnpm +pnpm add @auth0/universal-components-react react-hook-form @auth0/auth0-react +``` + + +Installs the package with required peer dependencies (`react-hook-form` and `@auth0/auth0-react`). + + + +## Configure your application + +1. Wrap your application with `Auth0Provider` and `Auth0ComponentProvider`: + +```tsx App.tsx +import { Auth0Provider } from "@auth0/auth0-react"; +import { Auth0ComponentProvider } from "@auth0/universal-components-react/spa"; +import "@auth0/universal-components-react/styles"; + +const domain = import.meta.env.VITE_AUTH0_DOMAIN; + +function App() { + return ( + + + {/* Your app components */} + + + ); +} +``` + +2. Import Universal Components: + +```tsx OrganizationManagementPage.tsx +import { useAuth0 } from "@auth0/auth0-react"; +import { OrganizationDetailsEdit } from "@auth0/universal-components-react/spa"; + +function OrganizationManagementPage() { + const { isAuthenticated, isLoading } = useAuth0(); + + if (isLoading) return
Loading...
; + if (!isAuthenticated) return
Please log in
; + + return ( +
+ +
+ ); +} +``` + +## Configure Universal Components + +The `Auth0ComponentProvider` manages authentication, caching, internationalization, and toast notifications for all components. + +```tsx App.tsx + + {/* Your app components */} + +``` + +## Style components + + + The stylesheet you imported (`@auth0/universal-components-react/styles`) + enables all component styles. If you're using Tailwind v4, add `@import + "@auth0/universal-components-react/tailwind"` to your CSS file. + + +Use CSS variables to customize your branding: + +```css +:root { + --primary: #4f46e5; /* your brand color */ + --primary-foreground: #ffffff; /* text on buttons */ +} +``` + +To learn more, read [Style Universal Components](/docs/get-started/universal-components/web/universal-components-style). + +
+ + +## Install Universal Components + + + You do not need `@auth0/auth0-react`. The Next.js implementation uses proxy + mode with server-side authentication. + + + +```bash npm +npm install @auth0/universal-components-react react-hook-form +``` + +```bash pnpm +pnpm add @auth0/universal-components-react react-hook-form +``` + + + +## Configure your application + +1. Wrap your application with `Auth0Provider` and `Auth0ComponentProvider`: + +In your `/root` layout, add the `Auth0ComponentProvider` in proxy mode: + +```tsx layout.tsx +import { Auth0ComponentProvider } from "@auth0/universal-components-react/rwa"; +import "@auth0/universal-components-react/styles"; + +export default function RootLayout({ children }) { + return ( + + + + {children} + + + + ); +} +``` + +2. Import Universal Components: + +```tsx page.tsx +import { OrganizationDetailsEdit } from "@auth0/universal-components-react/rwa"; + +export default function OrganizationManagementPage() { + return ( +
+ +
+ ); +} +``` + +## Configure Universal Components + +The `Auth0ComponentProvider` manages authentication, caching, internationalization, and toast notifications for all components. In Next.js, use proxy mode for server-side authentication. + +```tsx layout.tsx + + {/* Your app components */} + +``` + +## Style components + + + The stylesheet you imported (`@auth0/universal-components-react/styles`) + enables all component styles. If you're using Tailwind v4, add `@import + "@auth0/universal-components-react/tailwind"` to your CSS file. + + +Use CSS variables to customize your branding: + +```css +:root { + --primary: #4f46e5; /* your brand color */ + --primary-foreground: #ffffff; /* text on buttons */ +} +``` + +To learn more, read [Style Universal Components](/docs/get-started/universal-components/web/universal-components-style). + +
+ + + +## Install Universal Components + +Universal Components use `@/...` imports. Start by configuring the path alias and project dependencies: + +```bash +npx shadcn@latest init +``` + +Next, install Universal Components individually via the Shadcn CLI. For example: + +```bash +npx shadcn@latest add @auth0/organization-details-edit +``` + + + Shadcn CLI installs the component source code and the + `@auth0/universal-components-core` dependency for shared utilities and Auth0 + integration. + + +## Configure your application + +1. Wrap your application with `Auth0Provider` and `Auth0ComponentProvider`: + +```tsx App.tsx +import { Auth0Provider } from "@auth0/auth0-react"; +import { Auth0ComponentProvider } from "@auth0/universal-components-react/spa"; + +const domain = import.meta.env.VITE_AUTH0_DOMAIN; + +function App() { + return ( + + + {/* Your app components */} + + + ); +} +``` + +2. Import Universal Components: + +```tsx OrganizationManagementPage.tsx +import { OrganizationDetailsEdit } from "@/components/auth0/my-organization/organization-details-edit"; + +function OrganizationManagementPage() { + return ( +
+ +
+ ); +} +``` + +## Configure Universal Components + +The `Auth0ComponentProvider` manages authentication, caching, internationalization, and toast notifications for all components. + +```tsx App.tsx + + {/* Your app components */} + +``` + +## Style components + + + Styles for Shadcn are already included in your Tailwind build. No additional + style imports are needed. + + +Use CSS variables to customize your branding: + +```css +:root { + --primary: #4f46e5; /* your brand color */ + --primary-foreground: #ffffff; /* text on buttons */ +} +``` + +To learn more, read [Customize Style and Themes with Universal Components](/docs/get-started/universal-components/web/universal-components-style). + +
+
+ +## Example implementations + +See complete working examples in the sample applications. + + + React SPA (npm), React SPA (shadcn), and Next.js sample applications with full + implementation patterns + + + + + See My Organization Components in action in the live reference B2B SaaS app + + + + A secure and high-performance starting point for building modern B2B SaaS web applications. + + + +## Next steps + + + + Synchronize authentication, internationalization, theming, toast notifications, and caching across all components. + + + + Customize the design system using Tailwind CSS, CSS variables, and built-in theme presets. + + + + Use the My Organization API to let your customers manage their own Organizations, domains, and SSO providers. + + From 0243eef0f83e826c977e4670fb0ae3de24b9cc91 Mon Sep 17 00:00:00 2001 From: Suraj Thotakura Date: Tue, 9 Jun 2026 17:09:07 +0530 Subject: [PATCH 46/50] fix: minor corrections --- .../universal-components/android/android-overview.mdx | 4 ++-- .../ios/components/auth-methods-management.mdx | 1 + .../get-started/universal-components/ios/ios-overview.mdx | 6 +++--- .../universal-components/universal-components-overview.mdx | 2 +- .../get-started/universal-components/web/web-overview.mdx | 6 +++--- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/main/docs/get-started/universal-components/android/android-overview.mdx b/main/docs/get-started/universal-components/android/android-overview.mdx index e957ffe317..b84a3617e0 100644 --- a/main/docs/get-started/universal-components/android/android-overview.mdx +++ b/main/docs/get-started/universal-components/android/android-overview.mdx @@ -17,7 +17,7 @@ Universal Components for Android are built on top of the [Auth0 Android SDK](htt To configure the Universal Components for Android SDK, you need: * Operating systems: **Android 11+** (API 30). -* Programming Language: **Kotlin 2.2+**, **Android Gradle Plugin 8.11+**, **Jetpack Compose BOM 2024.09.00+**, **JDK 17+**. +* Programming language: **Kotlin 2.2+**, **Android Gradle Plugin 8.11+**, **Jetpack Compose BOM 2024.09.00+**, **JDK 17+**. @@ -78,7 +78,7 @@ To verify the Universal Components for Android SDK installation, confirm the dep ## Sample application -You can review the sample application of the [Universal Component for Android](https://github.com/auth0/ui-components-android#run-the-sample-app) SDK on GitHub. +You can review the sample application of the [Universal Components for Android](https://github.com/auth0/ui-components-android#run-the-sample-app) SDK on GitHub. The sample includes `MainActivity.kt`, which initializes the SDK via `Auth0UniversalComponents.initialize()`, and `LoginSecurityScreen.kt`, which renders the `AuthenticatorSettingsComponent`. diff --git a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx index 3172997bc0..84ae6ac19c 100644 --- a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx @@ -99,6 +99,7 @@ NavigationStack(path: $path) { } } } +.environment(\.hostNavigationPath, $path) ``` There are two requirements when using embedded mode: diff --git a/main/docs/get-started/universal-components/ios/ios-overview.mdx b/main/docs/get-started/universal-components/ios/ios-overview.mdx index 507343010f..f1b2ba2786 100644 --- a/main/docs/get-started/universal-components/ios/ios-overview.mdx +++ b/main/docs/get-started/universal-components/ios/ios-overview.mdx @@ -18,15 +18,15 @@ Universal Components for iOS are built on top of the [Auth0 Swift SDK](https://g To configure the Universal Components for iOS SDK, you need: * Operating systems: `iOS 16.0+` -* Programming language: `Swift 5+` (6 preferred), `Xcode 16+` (Preferred 26+) +* Programming language: `Swift 5+` (6 preferred), `Xcode 16+` (26+ preferred) -To enable Auth0 [passkey](/docs/authenticate/database-connections/passkeys) support, you need: **iOS 16.6+**, **macOS 13.5+**, or **visionOS 1.0+**. +To enable Auth0 [passkey](/docs/authenticate/database-connections/passkeys) support, you need **iOS 16.6+**. ## Install the SDK -The Universal Components for iOS SDK is distributed as the [`Auth0UniversalComponents`](/docs/get-started/universal-components/universal-components-overview) package. +The Universal Components for iOS SDK is distributed as the `Auth0UniversalComponents` package through [Swift Package Manager](https://swift.org/package-manager/) and [Carthage](https://github.com/Carthage/Carthage). ### Swift Package Manager diff --git a/main/docs/get-started/universal-components/universal-components-overview.mdx b/main/docs/get-started/universal-components/universal-components-overview.mdx index 7be37d5d0c..3b6d567ed4 100644 --- a/main/docs/get-started/universal-components/universal-components-overview.mdx +++ b/main/docs/get-started/universal-components/universal-components-overview.mdx @@ -30,7 +30,7 @@ Each platform styles components with its own native design system, so you can ma Universal Components are organized by the Auth0 API they target: -- **Web** components use the [My Organization API](/docs/api/myorganization) to build **delegated administration** interfaces, where your business customers manage their own Organizations, domains, and SSO providers. They run on React, Next.js, and shadcn. +- **Web** components use the [My Organization API](/docs/api/myorganization) to build **delegated administration** interfaces, where your business customers manage their own Organizations, domains, and SSO providers. They support React and Next.js, with an optional shadcn install path. - **iOS** and **Android** components use the [My Account API](/docs/manage-users/my-account-api) to build **end-user self-service** interfaces, where users manage their own authentication methods—MFA factors, passkeys, and recovery codes—inside your native application. diff --git a/main/docs/get-started/universal-components/web/web-overview.mdx b/main/docs/get-started/universal-components/web/web-overview.mdx index 0fe8d2dc93..073b822dab 100644 --- a/main/docs/get-started/universal-components/web/web-overview.mdx +++ b/main/docs/get-started/universal-components/web/web-overview.mdx @@ -38,7 +38,7 @@ pnpm add @auth0/universal-components-react react-hook-form @auth0/auth0-react ``` -Installs the package with required peer dependencies (`react-hook-form` and `@auth0/auth0-react`). +Installs the package alongside `react-hook-form` (a peer dependency) and `@auth0/auth0-react` (required for client-side SPA authentication). The Next.js tab uses proxy mode and does not need `@auth0/auth0-react`. @@ -149,7 +149,7 @@ pnpm add @auth0/universal-components-react react-hook-form 1. Wrap your application with `Auth0Provider` and `Auth0ComponentProvider`: -In your `/root` layout, add the `Auth0ComponentProvider` in proxy mode: + In your root layout, add the `Auth0ComponentProvider` in proxy mode. `Auth0Provider` is configured separately in your Next.js setup (typically in `layout.tsx` via [`@auth0/nextjs-auth0`](https://github.com/auth0/nextjs-auth0)). ```tsx layout.tsx import { Auth0ComponentProvider } from "@auth0/universal-components-react/rwa"; @@ -317,7 +317,7 @@ Use CSS variables to customize your branding: } ``` -To learn more, read [Customize Style and Themes with Universal Components](/docs/get-started/universal-components/web/universal-components-style). +To learn more, read [Style Universal Components](/docs/get-started/universal-components/web/universal-components-style). From 66c7c57c47813177d5961a32b5d04bf4d167d69d Mon Sep 17 00:00:00 2001 From: Suraj Thotakura Date: Wed, 10 Jun 2026 19:33:47 +0530 Subject: [PATCH 47/50] fix: restore Auth0ComponentProvider in component preview bundle In @auth0/universal-components-react v2.0.1 the package entries were split: the main entry exports *View components and useCoreClient, while the /spa entry exports only Auth0ComponentProvider. A previous commit (ad01b4f) switched mintlifyLoader from /spa to the main entry to recover the missing View components, but that removed Auth0ComponentProvider from the loaded module. getWrapper() destructures Auth0ComponentProvider from that module, so it silently became undefined and all My Org component previews stopped rendering. Fix: mintlifyLoader now imports from both entries in parallel and merges the results, so the wrapper has Auth0ComponentProvider, useCoreClient, and all *View components available. Rebuilt the UMD bundle. --- .../universal-components-1.0.17.umd.js | 76 +++++++++++++++++++ universal-components/src/routes/index.ts | 18 +++-- 2 files changed, 86 insertions(+), 8 deletions(-) create mode 100644 main/ui/universal-components/universal-components-1.0.17.umd.js diff --git a/main/ui/universal-components/universal-components-1.0.17.umd.js b/main/ui/universal-components/universal-components-1.0.17.umd.js new file mode 100644 index 0000000000..1c1bd8d671 --- /dev/null +++ b/main/ui/universal-components/universal-components-1.0.17.umd.js @@ -0,0 +1,76 @@ +(function(ul){typeof define=="function"&&define.amd?define(ul):ul()})((function(){"use strict";function ul(e,t){for(var n=0;nr[o]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}function sh(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var uh={exports:{}},ll={};var gA;function m9(){if(gA)return ll;gA=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.fragment");function n(r,o,s){var u=null;if(s!==void 0&&(u=""+s),o.key!==void 0&&(u=""+o.key),"key"in o){s={};for(var c in o)c!=="key"&&(s[c]=o[c])}else s=o;return o=s.ref,{$$typeof:e,type:r,key:u,ref:o!==void 0?o:null,props:s}}return ll.Fragment=t,ll.jsx=n,ll.jsxs=n,ll}var vA;function p9(){return vA||(vA=1,uh.exports=m9()),uh.exports}var f=p9(),lh={exports:{}},qe={};var AA;function g9(){if(AA)return qe;AA=1;var e=Symbol.for("react.transitional.element"),t=Symbol.for("react.portal"),n=Symbol.for("react.fragment"),r=Symbol.for("react.strict_mode"),o=Symbol.for("react.profiler"),s=Symbol.for("react.consumer"),u=Symbol.for("react.context"),c=Symbol.for("react.forward_ref"),d=Symbol.for("react.suspense"),p=Symbol.for("react.memo"),m=Symbol.for("react.lazy"),g=Symbol.for("react.activity"),y=Symbol.iterator;function A(z){return z===null||typeof z!="object"?null:(z=y&&z[y]||z["@@iterator"],typeof z=="function"?z:null)}var w={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},b=Object.assign,x={};function E(z,O,T){this.props=z,this.context=O,this.refs=x,this.updater=T||w}E.prototype.isReactComponent={},E.prototype.setState=function(z,O){if(typeof z!="object"&&typeof z!="function"&&z!=null)throw Error("takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,z,O,"setState")},E.prototype.forceUpdate=function(z){this.updater.enqueueForceUpdate(this,z,"forceUpdate")};function S(){}S.prototype=E.prototype;function F(z,O,T){this.props=z,this.context=O,this.refs=x,this.updater=T||w}var R=F.prototype=new S;R.constructor=F,b(R,E.prototype),R.isPureReactComponent=!0;var k=Array.isArray;function B(){}var N={H:null,A:null,T:null,S:null},P=Object.prototype.hasOwnProperty;function U(z,O,T){var J=T.ref;return{$$typeof:e,type:z,key:O,ref:J!==void 0?J:null,props:T}}function Q(z,O){return U(z.type,O,z.props)}function $(z){return typeof z=="object"&&z!==null&&z.$$typeof===e}function q(z){var O={"=":"=0",":":"=2"};return"$"+z.replace(/[=:]/g,function(T){return O[T]})}var V=/\/+/g;function W(z,O){return typeof z=="object"&&z!==null&&z.key!=null?q(""+z.key):O.toString(36)}function ae(z){switch(z.status){case"fulfilled":return z.value;case"rejected":throw z.reason;default:switch(typeof z.status=="string"?z.then(B,B):(z.status="pending",z.then(function(O){z.status==="pending"&&(z.status="fulfilled",z.value=O)},function(O){z.status==="pending"&&(z.status="rejected",z.reason=O)})),z.status){case"fulfilled":return z.value;case"rejected":throw z.reason}}throw z}function j(z,O,T,J,le){var me=typeof z;(me==="undefined"||me==="boolean")&&(z=null);var de=!1;if(z===null)de=!0;else switch(me){case"bigint":case"string":case"number":de=!0;break;case"object":switch(z.$$typeof){case e:case t:de=!0;break;case m:return de=z._init,j(de(z._payload),O,T,J,le)}}if(de)return le=le(z),de=J===""?"."+W(z,0):J,k(le)?(T="",de!=null&&(T=de.replace(V,"$&/")+"/"),j(le,O,T,"",function(Ke){return Ke})):le!=null&&($(le)&&(le=Q(le,T+(le.key==null||z&&z.key===le.key?"":(""+le.key).replace(V,"$&/")+"/")+de)),O.push(le)),1;de=0;var ye=J===""?".":J+":";if(k(z))for(var Ce=0;Ce>>1,ie=j[ue];if(0>>1;ueo(T,te))Jo(le,T)?(j[ue]=le,j[J]=te,ue=J):(j[ue]=T,j[O]=te,ue=O);else if(Jo(le,te))j[ue]=le,j[J]=te,ue=J;else break e}}return G}function o(j,G){var te=j.sortIndex-G.sortIndex;return te!==0?te:j.id-G.id}if(e.unstable_now=void 0,typeof performance=="object"&&typeof performance.now=="function"){var s=performance;e.unstable_now=function(){return s.now()}}else{var u=Date,c=u.now();e.unstable_now=function(){return u.now()-c}}var d=[],p=[],m=1,g=null,y=3,A=!1,w=!1,b=!1,x=!1,E=typeof setTimeout=="function"?setTimeout:null,S=typeof clearTimeout=="function"?clearTimeout:null,F=typeof setImmediate<"u"?setImmediate:null;function R(j){for(var G=n(p);G!==null;){if(G.callback===null)r(p);else if(G.startTime<=j)r(p),G.sortIndex=G.expirationTime,t(d,G);else break;G=n(p)}}function k(j){if(b=!1,R(j),!w)if(n(d)!==null)w=!0,B||(B=!0,q());else{var G=n(p);G!==null&&ae(k,G.startTime-j)}}var B=!1,N=-1,P=5,U=-1;function Q(){return x?!0:!(e.unstable_now()-Uj&&Q());){var ue=g.callback;if(typeof ue=="function"){g.callback=null,y=g.priorityLevel;var ie=ue(g.expirationTime<=j);if(j=e.unstable_now(),typeof ie=="function"){g.callback=ie,R(j),G=!0;break t}g===n(d)&&r(d),R(j)}else r(d);g=n(d)}if(g!==null)G=!0;else{var z=n(p);z!==null&&ae(k,z.startTime-j),G=!1}}break e}finally{g=null,y=te,A=!1}G=void 0}}finally{G?q():B=!1}}}var q;if(typeof F=="function")q=function(){F($)};else if(typeof MessageChannel<"u"){var V=new MessageChannel,W=V.port2;V.port1.onmessage=$,q=function(){W.postMessage(null)}}else q=function(){E($,0)};function ae(j,G){N=E(function(){j(e.unstable_now())},G)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(j){j.callback=null},e.unstable_forceFrameRate=function(j){0>j||125ue?(j.sortIndex=te,t(p,j),n(d)===null&&j===n(p)&&(b?(S(N),N=-1):b=!0,ae(k,te-ue))):(j.sortIndex=ie,t(d,j),w||A||(w=!0,B||(B=!0,q()))),j},e.unstable_shouldYield=Q,e.unstable_wrapCallback=function(j){var G=y;return function(){var te=y;y=G;try{return j.apply(this,arguments)}finally{y=te}}}})(mh)),mh}var xA;function A9(){return xA||(xA=1,hh.exports=v9()),hh.exports}var ph={exports:{}},In={};var _A;function y9(){if(_A)return In;_A=1;var e=ch();function t(d){var p="https://react.dev/errors/"+d;if(1"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),ph.exports=y9(),ph.exports}var EA;function b9(){if(EA)return cl;EA=1;var e=A9(),t=ch(),n=wA();function r(a){var i="https://react.dev/errors/"+a;if(1ie||(a.current=ue[ie],ue[ie]=null,ie--)}function T(a,i){ie++,ue[ie]=a.current,a.current=i}var J=z(null),le=z(null),me=z(null),de=z(null);function ye(a,i){switch(T(me,i),T(le,a),T(J,null),i.nodeType){case 9:case 11:a=(a=i.documentElement)&&(a=a.namespaceURI)?RD(a):0;break;default:if(a=i.tagName,i=i.namespaceURI)i=RD(i),a=BD(i,a);else switch(a){case"svg":a=1;break;case"math":a=2;break;default:a=0}}O(J),T(J,a)}function Ce(){O(J),O(le),O(me)}function Ke(a){a.memoizedState!==null&&T(de,a);var i=J.current,l=BD(i,a.type);i!==l&&(T(le,a),T(J,l))}function Xe(a){le.current===a&&(O(J),O(le)),de.current===a&&(O(de),Yc._currentValue=te)}var st,Wt;function jt(a){if(st===void 0)try{throw Error()}catch(l){var i=l.stack.trim().match(/\n( *(at )?)/);st=i&&i[1]||"",Wt=-1)":-1v||I[h]!==re[v]){var ce=` +`+I[h].replace(" at new "," at ");return a.displayName&&ce.includes("")&&(ce=ce.replace("",a.displayName)),ce}while(1<=h&&0<=v);break}}}finally{Br=!1,Error.prepareStackTrace=l}return(l=a?a.displayName||a.name:"")?jt(l):""}function kr(a,i){switch(a.tag){case 26:case 27:case 5:return jt(a.type);case 16:return jt("Lazy");case 13:return a.child!==i&&i!==null?jt("Suspense Fallback"):jt("Suspense");case 19:return jt("SuspenseList");case 0:case 15:return sr(a.type,!1);case 11:return sr(a.type.render,!1);case 1:return sr(a.type,!0);case 31:return jt("Activity");default:return""}}function ti(a){try{var i="",l=null;do i+=kr(a,l),l=a,a=a.return;while(a);return i}catch(h){return` +Error generating stack: `+h.message+` +`+h.stack}}var er=Object.prototype.hasOwnProperty,ni=e.unstable_scheduleCallback,ri=e.unstable_cancelCallback,Nn=e.unstable_shouldYield,Ka=e.unstable_requestPaint,Kn=e.unstable_now,qf=e.unstable_getCurrentPriorityLevel,qa=e.unstable_ImmediatePriority,L=e.unstable_UserBlockingPriority,K=e.unstable_NormalPriority,ee=e.unstable_LowPriority,pe=e.unstable_IdlePriority,Ae=e.log,be=e.unstable_setDisableYieldValue,ve=null,Ee=null;function Oe(a){if(typeof Ae=="function"&&be(a),Ee&&typeof Ee.setStrictMode=="function")try{Ee.setStrictMode(ve,a)}catch{}}var ct=Math.clz32?Math.clz32:En,qn=Math.log,Tn=Math.LN2;function En(a){return a>>>=0,a===0?32:31-(qn(a)/Tn|0)|0}var Za=256,Wa=262144,ho=4194304;function Mr(a){var i=a&42;if(i!==0)return i;switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return a&261888;case 262144:case 524288:case 1048576:case 2097152:return a&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return a&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return a}}function Ie(a,i,l){var h=a.pendingLanes;if(h===0)return 0;var v=0,_=a.suspendedLanes,D=a.pingedLanes;a=a.warmLanes;var M=h&134217727;return M!==0?(h=M&~_,h!==0?v=Mr(h):(D&=M,D!==0?v=Mr(D):l||(l=M&~a,l!==0&&(v=Mr(l))))):(M=h&~_,M!==0?v=Mr(M):D!==0?v=Mr(D):l||(l=h&~a,l!==0&&(v=Mr(l)))),v===0?0:i!==0&&i!==v&&(i&_)===0&&(_=v&-v,l=i&-i,_>=l||_===32&&(l&4194048)!==0)?i:v}function Pt(a,i){return(a.pendingLanes&~(a.suspendedLanes&~a.pingedLanes)&i)===0}function Sn(a,i){switch(a){case 1:case 2:case 4:case 8:case 64:return i+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return i+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Zn(){var a=ho;return ho<<=1,(ho&62914560)===0&&(ho=4194304),a}function ai(a){for(var i=[],l=0;31>l;l++)i.push(a);return i}function an(a,i){a.pendingLanes|=i,i!==268435456&&(a.suspendedLanes=0,a.pingedLanes=0,a.warmLanes=0)}function ur(a,i,l,h,v,_){var D=a.pendingLanes;a.pendingLanes=l,a.suspendedLanes=0,a.pingedLanes=0,a.warmLanes=0,a.expiredLanes&=l,a.entangledLanes&=l,a.errorRecoveryDisabledLanes&=l,a.shellSuspendCounter=0;var M=a.entanglements,I=a.expirationTimes,re=a.hiddenUpdates;for(l=D&~l;0"u")return null;try{return a.activeElement||a.body}catch{return a.body}}var $V=/[\n"\\]/g;function ra(a){return a.replace($V,function(i){return"\\"+i.charCodeAt(0).toString(16)+" "})}function c3(a,i,l,h,v,_,D,M){a.name="",D!=null&&typeof D!="function"&&typeof D!="symbol"&&typeof D!="boolean"?a.type=D:a.removeAttribute("type"),i!=null?D==="number"?(i===0&&a.value===""||a.value!=i)&&(a.value=""+na(i)):a.value!==""+na(i)&&(a.value=""+na(i)):D!=="submit"&&D!=="reset"||a.removeAttribute("value"),i!=null?d3(a,D,na(i)):l!=null?d3(a,D,na(l)):h!=null&&a.removeAttribute("value"),v==null&&_!=null&&(a.defaultChecked=!!_),v!=null&&(a.checked=v&&typeof v!="function"&&typeof v!="symbol"),M!=null&&typeof M!="function"&&typeof M!="symbol"&&typeof M!="boolean"?a.name=""+na(M):a.removeAttribute("name")}function C6(a,i,l,h,v,_,D,M){if(_!=null&&typeof _!="function"&&typeof _!="symbol"&&typeof _!="boolean"&&(a.type=_),i!=null||l!=null){if(!(_!=="submit"&&_!=="reset"||i!=null)){l3(a);return}l=l!=null?""+na(l):"",i=i!=null?""+na(i):l,M||i===a.value||(a.value=i),a.defaultValue=i}h=h??v,h=typeof h!="function"&&typeof h!="symbol"&&!!h,a.checked=M?a.checked:!!h,a.defaultChecked=!!h,D!=null&&typeof D!="function"&&typeof D!="symbol"&&typeof D!="boolean"&&(a.name=D),l3(a)}function d3(a,i,l){i==="number"&&Xf(a.ownerDocument)===a||a.defaultValue===""+l||(a.defaultValue=""+l)}function Fu(a,i,l,h){if(a=a.options,i){i={};for(var v=0;v"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),g3=!1;if(go)try{var cc={};Object.defineProperty(cc,"passive",{get:function(){g3=!0}}),window.addEventListener("test",cc,cc),window.removeEventListener("test",cc,cc)}catch{g3=!1}var ii=null,v3=null,Jf=null;function B6(){if(Jf)return Jf;var a,i=v3,l=i.length,h,v="value"in ii?ii.value:ii.textContent,_=v.length;for(a=0;a=hc),P6=" ",z6=!1;function L6(a,i){switch(a){case"keyup":return SH.indexOf(i.keyCode)!==-1;case"keydown":return i.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function O6(a){return a=a.detail,typeof a=="object"&&"data"in a?a.data:null}var Mu=!1;function FH(a,i){switch(a){case"compositionend":return O6(i);case"keypress":return i.which!==32?null:(z6=!0,P6);case"textInput":return a=i.data,a===P6&&z6?null:a;default:return null}}function RH(a,i){if(Mu)return a==="compositionend"||!_3&&L6(a,i)?(a=B6(),Jf=v3=ii=null,Mu=!1,a):null;switch(a){case"paste":return null;case"keypress":if(!(i.ctrlKey||i.altKey||i.metaKey)||i.ctrlKey&&i.altKey){if(i.char&&1=i)return{node:l,offset:i-a};a=h}e:{for(;l;){if(l.nextSibling){l=l.nextSibling;break e}l=l.parentNode}l=void 0}l=K6(l)}}function Z6(a,i){return a&&i?a===i?!0:a&&a.nodeType===3?!1:i&&i.nodeType===3?Z6(a,i.parentNode):"contains"in a?a.contains(i):a.compareDocumentPosition?!!(a.compareDocumentPosition(i)&16):!1:!1}function W6(a){a=a!=null&&a.ownerDocument!=null&&a.ownerDocument.defaultView!=null?a.ownerDocument.defaultView:window;for(var i=Xf(a.document);i instanceof a.HTMLIFrameElement;){try{var l=typeof i.contentWindow.location.href=="string"}catch{l=!1}if(l)a=i.contentWindow;else break;i=Xf(a.document)}return i}function E3(a){var i=a&&a.nodeName&&a.nodeName.toLowerCase();return i&&(i==="input"&&(a.type==="text"||a.type==="search"||a.type==="tel"||a.type==="url"||a.type==="password")||i==="textarea"||a.contentEditable==="true")}var zH=go&&"documentMode"in document&&11>=document.documentMode,Nu=null,S3=null,vc=null,D3=!1;function X6(a,i,l){var h=l.window===l?l.document:l.nodeType===9?l:l.ownerDocument;D3||Nu==null||Nu!==Xf(h)||(h=Nu,"selectionStart"in h&&E3(h)?h={start:h.selectionStart,end:h.selectionEnd}:(h=(h.ownerDocument&&h.ownerDocument.defaultView||window).getSelection(),h={anchorNode:h.anchorNode,anchorOffset:h.anchorOffset,focusNode:h.focusNode,focusOffset:h.focusOffset}),vc&&gc(vc,h)||(vc=h,h=Y0(S3,"onSelect"),0>=D,v-=D,Xa=1<<32-ct(i)+v|l<et?(mt=ke,ke=null):mt=ke.sibling;var _t=oe(Z,ke,ne[et],fe);if(_t===null){ke===null&&(ke=mt);break}a&&ke&&_t.alternate===null&&i(Z,ke),H=_(_t,H,et),xt===null?je=_t:xt.sibling=_t,xt=_t,ke=mt}if(et===ne.length)return l(Z,ke),pt&&Ao(Z,et),je;if(ke===null){for(;etet?(mt=ke,ke=null):mt=ke.sibling;var Fi=oe(Z,ke,_t.value,fe);if(Fi===null){ke===null&&(ke=mt);break}a&&ke&&Fi.alternate===null&&i(Z,ke),H=_(Fi,H,et),xt===null?je=Fi:xt.sibling=Fi,xt=Fi,ke=mt}if(_t.done)return l(Z,ke),pt&&Ao(Z,et),je;if(ke===null){for(;!_t.done;et++,_t=ne.next())_t=he(Z,_t.value,fe),_t!==null&&(H=_(_t,H,et),xt===null?je=_t:xt.sibling=_t,xt=_t);return pt&&Ao(Z,et),je}for(ke=h(ke);!_t.done;et++,_t=ne.next())_t=se(ke,Z,et,_t.value,fe),_t!==null&&(a&&_t.alternate!==null&&ke.delete(_t.key===null?et:_t.key),H=_(_t,H,et),xt===null?je=_t:xt.sibling=_t,xt=_t);return a&&ke.forEach(function(rG){return i(Z,rG)}),pt&&Ao(Z,et),je}function Mt(Z,H,ne,fe){if(typeof ne=="object"&&ne!==null&&ne.type===b&&ne.key===null&&(ne=ne.props.children),typeof ne=="object"&&ne!==null){switch(ne.$$typeof){case A:e:{for(var je=ne.key;H!==null;){if(H.key===je){if(je=ne.type,je===b){if(H.tag===7){l(Z,H.sibling),fe=v(H,ne.props.children),fe.return=Z,Z=fe;break e}}else if(H.elementType===je||typeof je=="object"&&je!==null&&je.$$typeof===P&&ys(je)===H.type){l(Z,H.sibling),fe=v(H,ne.props),Cc(fe,ne),fe.return=Z,Z=fe;break e}l(Z,H);break}else i(Z,H);H=H.sibling}ne.type===b?(fe=ms(ne.props.children,Z.mode,fe,ne.key),fe.return=Z,Z=fe):(fe=l0(ne.type,ne.key,ne.props,null,Z.mode,fe),Cc(fe,ne),fe.return=Z,Z=fe)}return D(Z);case w:e:{for(je=ne.key;H!==null;){if(H.key===je)if(H.tag===4&&H.stateNode.containerInfo===ne.containerInfo&&H.stateNode.implementation===ne.implementation){l(Z,H.sibling),fe=v(H,ne.children||[]),fe.return=Z,Z=fe;break e}else{l(Z,H);break}else i(Z,H);H=H.sibling}fe=T3(ne,Z.mode,fe),fe.return=Z,Z=fe}return D(Z);case P:return ne=ys(ne),Mt(Z,H,ne,fe)}if(ae(ne))return Re(Z,H,ne,fe);if(q(ne)){if(je=q(ne),typeof je!="function")throw Error(r(150));return ne=je.call(ne),Pe(Z,H,ne,fe)}if(typeof ne.then=="function")return Mt(Z,H,g0(ne),fe);if(ne.$$typeof===F)return Mt(Z,H,f0(Z,ne),fe);v0(Z,ne)}return typeof ne=="string"&&ne!==""||typeof ne=="number"||typeof ne=="bigint"?(ne=""+ne,H!==null&&H.tag===6?(l(Z,H.sibling),fe=v(H,ne),fe.return=Z,Z=fe):(l(Z,H),fe=N3(ne,Z.mode,fe),fe.return=Z,Z=fe),D(Z)):l(Z,H)}return function(Z,H,ne,fe){try{_c=0;var je=Mt(Z,H,ne,fe);return Qu=null,je}catch(ke){if(ke===Hu||ke===m0)throw ke;var xt=Tr(29,ke,null,Z.mode);return xt.lanes=fe,xt.return=Z,xt}}}var xs=b4(!0),x4=b4(!1),di=!1;function Y3(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function K3(a,i){a=a.updateQueue,i.updateQueue===a&&(i.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,callbacks:null})}function fi(a){return{lane:a,tag:0,payload:null,callback:null,next:null}}function hi(a,i,l){var h=a.updateQueue;if(h===null)return null;if(h=h.shared,(Ct&2)!==0){var v=h.pending;return v===null?i.next=i:(i.next=v.next,v.next=i),h.pending=i,i=u0(a),a4(a,null,l),i}return s0(a,h,i,l),u0(a)}function wc(a,i,l){if(i=i.updateQueue,i!==null&&(i=i.shared,(l&4194048)!==0)){var h=i.lanes;h&=a.pendingLanes,l|=h,i.lanes=l,lr(a,l)}}function q3(a,i){var l=a.updateQueue,h=a.alternate;if(h!==null&&(h=h.updateQueue,l===h)){var v=null,_=null;if(l=l.firstBaseUpdate,l!==null){do{var D={lane:l.lane,tag:l.tag,payload:l.payload,callback:null,next:null};_===null?v=_=D:_=_.next=D,l=l.next}while(l!==null);_===null?v=_=i:_=_.next=i}else v=_=i;l={baseState:h.baseState,firstBaseUpdate:v,lastBaseUpdate:_,shared:h.shared,callbacks:h.callbacks},a.updateQueue=l;return}a=l.lastBaseUpdate,a===null?l.firstBaseUpdate=i:a.next=i,l.lastBaseUpdate=i}var Z3=!1;function Ec(){if(Z3){var a=Vu;if(a!==null)throw a}}function Sc(a,i,l,h){Z3=!1;var v=a.updateQueue;di=!1;var _=v.firstBaseUpdate,D=v.lastBaseUpdate,M=v.shared.pending;if(M!==null){v.shared.pending=null;var I=M,re=I.next;I.next=null,D===null?_=re:D.next=re,D=I;var ce=a.alternate;ce!==null&&(ce=ce.updateQueue,M=ce.lastBaseUpdate,M!==D&&(M===null?ce.firstBaseUpdate=re:M.next=re,ce.lastBaseUpdate=I))}if(_!==null){var he=v.baseState;D=0,ce=re=I=null,M=_;do{var oe=M.lane&-536870913,se=oe!==M.lane;if(se?(ht&oe)===oe:(h&oe)===oe){oe!==0&&oe===Uu&&(Z3=!0),ce!==null&&(ce=ce.next={lane:0,tag:M.tag,payload:M.payload,callback:null,next:null});e:{var Re=a,Pe=M;oe=i;var Mt=l;switch(Pe.tag){case 1:if(Re=Pe.payload,typeof Re=="function"){he=Re.call(Mt,he,oe);break e}he=Re;break e;case 3:Re.flags=Re.flags&-65537|128;case 0:if(Re=Pe.payload,oe=typeof Re=="function"?Re.call(Mt,he,oe):Re,oe==null)break e;he=g({},he,oe);break e;case 2:di=!0}}oe=M.callback,oe!==null&&(a.flags|=64,se&&(a.flags|=8192),se=v.callbacks,se===null?v.callbacks=[oe]:se.push(oe))}else se={lane:oe,tag:M.tag,payload:M.payload,callback:M.callback,next:null},ce===null?(re=ce=se,I=he):ce=ce.next=se,D|=oe;if(M=M.next,M===null){if(M=v.shared.pending,M===null)break;se=M,M=se.next,se.next=null,v.lastBaseUpdate=se,v.shared.pending=null}}while(!0);ce===null&&(I=he),v.baseState=I,v.firstBaseUpdate=re,v.lastBaseUpdate=ce,_===null&&(v.shared.lanes=0),Ai|=D,a.lanes=D,a.memoizedState=he}}function _4(a,i){if(typeof a!="function")throw Error(r(191,a));a.call(i)}function C4(a,i){var l=a.callbacks;if(l!==null)for(a.callbacks=null,a=0;a_?_:8;var D=j.T,M={};j.T=M,mv(a,!1,i,l);try{var I=v(),re=j.S;if(re!==null&&re(M,I),I!==null&&typeof I=="object"&&typeof I.then=="function"){var ce=YH(I,h);Rc(a,i,ce,Or(a))}else Rc(a,i,h,Or(a))}catch(he){Rc(a,i,{then:function(){},status:"rejected",reason:he},Or())}finally{G.p=_,D!==null&&M.types!==null&&(D.types=M.types),j.T=D}}function $H(){}function fv(a,i,l,h){if(a.tag!==5)throw Error(r(476));var v=tS(a).queue;eS(a,v,i,te,l===null?$H:function(){return nS(a),l(h)})}function tS(a){var i=a.memoizedState;if(i!==null)return i;i={memoizedState:te,baseState:te,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:_o,lastRenderedState:te},next:null};var l={};return i.next={memoizedState:l,baseState:l,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:_o,lastRenderedState:l},next:null},a.memoizedState=i,a=a.alternate,a!==null&&(a.memoizedState=i),i}function nS(a){var i=tS(a);i.next===null&&(i=a.alternate.memoizedState),Rc(a,i.next.queue,{},Or())}function hv(){return zn(Yc)}function rS(){return hn().memoizedState}function aS(){return hn().memoizedState}function JH(a){for(var i=a.return;i!==null;){switch(i.tag){case 24:case 3:var l=Or();a=fi(l);var h=hi(i,a,l);h!==null&&(vr(h,i,l),wc(h,i,l)),i={cache:V3()},a.payload=i;return}i=i.return}}function eQ(a,i,l){var h=Or();l={lane:h,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null},D0(a)?iS(i,l):(l=k3(a,i,l,h),l!==null&&(vr(l,a,h),sS(l,i,h)))}function oS(a,i,l){var h=Or();Rc(a,i,l,h)}function Rc(a,i,l,h){var v={lane:h,revertLane:0,gesture:null,action:l,hasEagerState:!1,eagerState:null,next:null};if(D0(a))iS(i,v);else{var _=a.alternate;if(a.lanes===0&&(_===null||_.lanes===0)&&(_=i.lastRenderedReducer,_!==null))try{var D=i.lastRenderedState,M=_(D,l);if(v.hasEagerState=!0,v.eagerState=M,Nr(M,D))return s0(a,i,v,0),zt===null&&i0(),!1}catch{}if(l=k3(a,i,v,h),l!==null)return vr(l,a,h),sS(l,i,h),!0}return!1}function mv(a,i,l,h){if(h={lane:2,revertLane:Yv(),gesture:null,action:h,hasEagerState:!1,eagerState:null,next:null},D0(a)){if(i)throw Error(r(479))}else i=k3(a,l,h,2),i!==null&&vr(i,a,2)}function D0(a){var i=a.alternate;return a===$e||i!==null&&i===$e}function iS(a,i){Yu=b0=!0;var l=a.pending;l===null?i.next=i:(i.next=l.next,l.next=i),a.pending=i}function sS(a,i,l){if((l&4194048)!==0){var h=i.lanes;h&=a.pendingLanes,l|=h,i.lanes=l,lr(a,l)}}var Bc={readContext:zn,use:C0,useCallback:un,useContext:un,useEffect:un,useImperativeHandle:un,useLayoutEffect:un,useInsertionEffect:un,useMemo:un,useReducer:un,useRef:un,useState:un,useDebugValue:un,useDeferredValue:un,useTransition:un,useSyncExternalStore:un,useId:un,useHostTransitionStatus:un,useFormState:un,useActionState:un,useOptimistic:un,useMemoCache:un,useCacheRefresh:un};Bc.useEffectEvent=un;var uS={readContext:zn,use:C0,useCallback:function(a,i){return tr().memoizedState=[a,i===void 0?null:i],a},useContext:zn,useEffect:G4,useImperativeHandle:function(a,i,l){l=l!=null?l.concat([a]):null,E0(4194308,4,Z4.bind(null,i,a),l)},useLayoutEffect:function(a,i){return E0(4194308,4,a,i)},useInsertionEffect:function(a,i){E0(4,2,a,i)},useMemo:function(a,i){var l=tr();i=i===void 0?null:i;var h=a();if(_s){Oe(!0);try{a()}finally{Oe(!1)}}return l.memoizedState=[h,i],h},useReducer:function(a,i,l){var h=tr();if(l!==void 0){var v=l(i);if(_s){Oe(!0);try{l(i)}finally{Oe(!1)}}}else v=i;return h.memoizedState=h.baseState=v,a={pending:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:v},h.queue=a,a=a.dispatch=eQ.bind(null,$e,a),[h.memoizedState,a]},useRef:function(a){var i=tr();return a={current:a},i.memoizedState=a},useState:function(a){a=sv(a);var i=a.queue,l=oS.bind(null,$e,i);return i.dispatch=l,[a.memoizedState,l]},useDebugValue:cv,useDeferredValue:function(a,i){var l=tr();return dv(l,a,i)},useTransition:function(){var a=sv(!1);return a=eS.bind(null,$e,a.queue,!0,!1),tr().memoizedState=a,[!1,a]},useSyncExternalStore:function(a,i,l){var h=$e,v=tr();if(pt){if(l===void 0)throw Error(r(407));l=l()}else{if(l=i(),zt===null)throw Error(r(349));(ht&127)!==0||R4(h,i,l)}v.memoizedState=l;var _={value:l,getSnapshot:i};return v.queue=_,G4(k4.bind(null,h,_,a),[a]),h.flags|=2048,qu(9,{destroy:void 0},B4.bind(null,h,_,l,i),null),l},useId:function(){var a=tr(),i=zt.identifierPrefix;if(pt){var l=$a,h=Xa;l=(h&~(1<<32-ct(h)-1)).toString(32)+l,i="_"+i+"R_"+l,l=x0++,0<\/script>",_=_.removeChild(_.firstChild);break;case"select":_=typeof h.is=="string"?D.createElement("select",{is:h.is}):D.createElement("select"),h.multiple?_.multiple=!0:h.size&&(_.size=h.size);break;default:_=typeof h.is=="string"?D.createElement(v,{is:h.is}):D.createElement(v)}}_[jn]=i,_[dr]=h;e:for(D=i.child;D!==null;){if(D.tag===5||D.tag===6)_.appendChild(D.stateNode);else if(D.tag!==4&&D.tag!==27&&D.child!==null){D.child.return=D,D=D.child;continue}if(D===i)break e;for(;D.sibling===null;){if(D.return===null||D.return===i)break e;D=D.return}D.sibling.return=D.return,D=D.sibling}i.stateNode=_;e:switch(On(_,v,h),v){case"button":case"input":case"select":case"textarea":h=!!h.autoFocus;break e;case"img":h=!0;break e;default:h=!1}h&&wo(i)}}return $t(i),Fv(i,i.type,a===null?null:a.memoizedProps,i.pendingProps,l),null;case 6:if(a&&i.stateNode!=null)a.memoizedProps!==h&&wo(i);else{if(typeof h!="string"&&i.stateNode===null)throw Error(r(166));if(a=me.current,Ou(i)){if(a=i.stateNode,l=i.memoizedProps,h=null,v=Pn,v!==null)switch(v.tag){case 27:case 5:h=v.memoizedProps}a[jn]=i,a=!!(a.nodeValue===l||h!==null&&h.suppressHydrationWarning===!0||DD(a.nodeValue,l)),a||li(i,!0)}else a=K0(a).createTextNode(h),a[jn]=i,i.stateNode=a}return $t(i),null;case 31:if(l=i.memoizedState,a===null||a.memoizedState!==null){if(h=Ou(i),l!==null){if(a===null){if(!h)throw Error(r(318));if(a=i.memoizedState,a=a!==null?a.dehydrated:null,!a)throw Error(r(557));a[jn]=i}else ps(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;$t(i),a=!1}else l=L3(),a!==null&&a.memoizedState!==null&&(a.memoizedState.hydrationErrors=l),a=!0;if(!a)return i.flags&256?(Pr(i),i):(Pr(i),null);if((i.flags&128)!==0)throw Error(r(558))}return $t(i),null;case 13:if(h=i.memoizedState,a===null||a.memoizedState!==null&&a.memoizedState.dehydrated!==null){if(v=Ou(i),h!==null&&h.dehydrated!==null){if(a===null){if(!v)throw Error(r(318));if(v=i.memoizedState,v=v!==null?v.dehydrated:null,!v)throw Error(r(317));v[jn]=i}else ps(),(i.flags&128)===0&&(i.memoizedState=null),i.flags|=4;$t(i),v=!1}else v=L3(),a!==null&&a.memoizedState!==null&&(a.memoizedState.hydrationErrors=v),v=!0;if(!v)return i.flags&256?(Pr(i),i):(Pr(i),null)}return Pr(i),(i.flags&128)!==0?(i.lanes=l,i):(l=h!==null,a=a!==null&&a.memoizedState!==null,l&&(h=i.child,v=null,h.alternate!==null&&h.alternate.memoizedState!==null&&h.alternate.memoizedState.cachePool!==null&&(v=h.alternate.memoizedState.cachePool.pool),_=null,h.memoizedState!==null&&h.memoizedState.cachePool!==null&&(_=h.memoizedState.cachePool.pool),_!==v&&(h.flags|=2048)),l!==a&&l&&(i.child.flags|=8192),M0(i,i.updateQueue),$t(i),null);case 4:return Ce(),a===null&&Wv(i.stateNode.containerInfo),$t(i),null;case 10:return bo(i.type),$t(i),null;case 19:if(O(fn),h=i.memoizedState,h===null)return $t(i),null;if(v=(i.flags&128)!==0,_=h.rendering,_===null)if(v)Mc(h,!1);else{if(ln!==0||a!==null&&(a.flags&128)!==0)for(a=i.child;a!==null;){if(_=y0(a),_!==null){for(i.flags|=128,Mc(h,!1),a=_.updateQueue,i.updateQueue=a,M0(i,a),i.subtreeFlags=0,a=l,l=i.child;l!==null;)o4(l,a),l=l.sibling;return T(fn,fn.current&1|2),pt&&Ao(i,h.treeForkCount),i.child}a=a.sibling}h.tail!==null&&Kn()>z0&&(i.flags|=128,v=!0,Mc(h,!1),i.lanes=4194304)}else{if(!v)if(a=y0(_),a!==null){if(i.flags|=128,v=!0,a=a.updateQueue,i.updateQueue=a,M0(i,a),Mc(h,!0),h.tail===null&&h.tailMode==="hidden"&&!_.alternate&&!pt)return $t(i),null}else 2*Kn()-h.renderingStartTime>z0&&l!==536870912&&(i.flags|=128,v=!0,Mc(h,!1),i.lanes=4194304);h.isBackwards?(_.sibling=i.child,i.child=_):(a=h.last,a!==null?a.sibling=_:i.child=_,h.last=_)}return h.tail!==null?(a=h.tail,h.rendering=a,h.tail=a.sibling,h.renderingStartTime=Kn(),a.sibling=null,l=fn.current,T(fn,v?l&1|2:l&1),pt&&Ao(i,h.treeForkCount),a):($t(i),null);case 22:case 23:return Pr(i),X3(),h=i.memoizedState!==null,a!==null?a.memoizedState!==null!==h&&(i.flags|=8192):h&&(i.flags|=8192),h?(l&536870912)!==0&&(i.flags&128)===0&&($t(i),i.subtreeFlags&6&&(i.flags|=8192)):$t(i),l=i.updateQueue,l!==null&&M0(i,l.retryQueue),l=null,a!==null&&a.memoizedState!==null&&a.memoizedState.cachePool!==null&&(l=a.memoizedState.cachePool.pool),h=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(h=i.memoizedState.cachePool.pool),h!==l&&(i.flags|=2048),a!==null&&O(As),null;case 24:return l=null,a!==null&&(l=a.memoizedState.cache),i.memoizedState.cache!==l&&(i.flags|=2048),bo(An),$t(i),null;case 25:return null;case 30:return null}throw Error(r(156,i.tag))}function oQ(a,i){switch(P3(i),i.tag){case 1:return a=i.flags,a&65536?(i.flags=a&-65537|128,i):null;case 3:return bo(An),Ce(),a=i.flags,(a&65536)!==0&&(a&128)===0?(i.flags=a&-65537|128,i):null;case 26:case 27:case 5:return Xe(i),null;case 31:if(i.memoizedState!==null){if(Pr(i),i.alternate===null)throw Error(r(340));ps()}return a=i.flags,a&65536?(i.flags=a&-65537|128,i):null;case 13:if(Pr(i),a=i.memoizedState,a!==null&&a.dehydrated!==null){if(i.alternate===null)throw Error(r(340));ps()}return a=i.flags,a&65536?(i.flags=a&-65537|128,i):null;case 19:return O(fn),null;case 4:return Ce(),null;case 10:return bo(i.type),null;case 22:case 23:return Pr(i),X3(),a!==null&&O(As),a=i.flags,a&65536?(i.flags=a&-65537|128,i):null;case 24:return bo(An),null;case 25:return null;default:return null}}function MS(a,i){switch(P3(i),i.tag){case 3:bo(An),Ce();break;case 26:case 27:case 5:Xe(i);break;case 4:Ce();break;case 31:i.memoizedState!==null&&Pr(i);break;case 13:Pr(i);break;case 19:O(fn);break;case 10:bo(i.type);break;case 22:case 23:Pr(i),X3(),a!==null&&O(As);break;case 24:bo(An)}}function Nc(a,i){try{var l=i.updateQueue,h=l!==null?l.lastEffect:null;if(h!==null){var v=h.next;l=v;do{if((l.tag&a)===a){h=void 0;var _=l.create,D=l.inst;h=_(),D.destroy=h}l=l.next}while(l!==v)}}catch(M){Ft(i,i.return,M)}}function gi(a,i,l){try{var h=i.updateQueue,v=h!==null?h.lastEffect:null;if(v!==null){var _=v.next;h=_;do{if((h.tag&a)===a){var D=h.inst,M=D.destroy;if(M!==void 0){D.destroy=void 0,v=i;var I=l,re=M;try{re()}catch(ce){Ft(v,I,ce)}}}h=h.next}while(h!==_)}}catch(ce){Ft(i,i.return,ce)}}function NS(a){var i=a.updateQueue;if(i!==null){var l=a.stateNode;try{C4(i,l)}catch(h){Ft(a,a.return,h)}}}function TS(a,i,l){l.props=Cs(a.type,a.memoizedProps),l.state=a.memoizedState;try{l.componentWillUnmount()}catch(h){Ft(a,i,h)}}function Tc(a,i){try{var l=a.ref;if(l!==null){switch(a.tag){case 26:case 27:case 5:var h=a.stateNode;break;case 30:h=a.stateNode;break;default:h=a.stateNode}typeof l=="function"?a.refCleanup=l(h):l.current=h}}catch(v){Ft(a,i,v)}}function Ja(a,i){var l=a.ref,h=a.refCleanup;if(l!==null)if(typeof h=="function")try{h()}catch(v){Ft(a,i,v)}finally{a.refCleanup=null,a=a.alternate,a!=null&&(a.refCleanup=null)}else if(typeof l=="function")try{l(null)}catch(v){Ft(a,i,v)}else l.current=null}function jS(a){var i=a.type,l=a.memoizedProps,h=a.stateNode;try{e:switch(i){case"button":case"input":case"select":case"textarea":l.autoFocus&&h.focus();break e;case"img":l.src?h.src=l.src:l.srcSet&&(h.srcset=l.srcSet)}}catch(v){Ft(a,a.return,v)}}function Rv(a,i,l){try{var h=a.stateNode;DQ(h,a.type,l,i),h[dr]=i}catch(v){Ft(a,a.return,v)}}function PS(a){return a.tag===5||a.tag===3||a.tag===26||a.tag===27&&Ci(a.type)||a.tag===4}function Bv(a){e:for(;;){for(;a.sibling===null;){if(a.return===null||PS(a.return))return null;a=a.return}for(a.sibling.return=a.return,a=a.sibling;a.tag!==5&&a.tag!==6&&a.tag!==18;){if(a.tag===27&&Ci(a.type)||a.flags&2||a.child===null||a.tag===4)continue e;a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}function kv(a,i,l){var h=a.tag;if(h===5||h===6)a=a.stateNode,i?(l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l).insertBefore(a,i):(i=l.nodeType===9?l.body:l.nodeName==="HTML"?l.ownerDocument.body:l,i.appendChild(a),l=l._reactRootContainer,l!=null||i.onclick!==null||(i.onclick=po));else if(h!==4&&(h===27&&Ci(a.type)&&(l=a.stateNode,i=null),a=a.child,a!==null))for(kv(a,i,l),a=a.sibling;a!==null;)kv(a,i,l),a=a.sibling}function N0(a,i,l){var h=a.tag;if(h===5||h===6)a=a.stateNode,i?l.insertBefore(a,i):l.appendChild(a);else if(h!==4&&(h===27&&Ci(a.type)&&(l=a.stateNode),a=a.child,a!==null))for(N0(a,i,l),a=a.sibling;a!==null;)N0(a,i,l),a=a.sibling}function zS(a){var i=a.stateNode,l=a.memoizedProps;try{for(var h=a.type,v=i.attributes;v.length;)i.removeAttributeNode(v[0]);On(i,h,l),i[jn]=a,i[dr]=l}catch(_){Ft(a,a.return,_)}}var Eo=!1,xn=!1,Mv=!1,LS=typeof WeakSet=="function"?WeakSet:Set,Fn=null;function iQ(a,i){if(a=a.containerInfo,Jv=eh,a=W6(a),E3(a)){if("selectionStart"in a)var l={start:a.selectionStart,end:a.selectionEnd};else e:{l=(l=a.ownerDocument)&&l.defaultView||window;var h=l.getSelection&&l.getSelection();if(h&&h.rangeCount!==0){l=h.anchorNode;var v=h.anchorOffset,_=h.focusNode;h=h.focusOffset;try{l.nodeType,_.nodeType}catch{l=null;break e}var D=0,M=-1,I=-1,re=0,ce=0,he=a,oe=null;t:for(;;){for(var se;he!==l||v!==0&&he.nodeType!==3||(M=D+v),he!==_||h!==0&&he.nodeType!==3||(I=D+h),he.nodeType===3&&(D+=he.nodeValue.length),(se=he.firstChild)!==null;)oe=he,he=se;for(;;){if(he===a)break t;if(oe===l&&++re===v&&(M=D),oe===_&&++ce===h&&(I=D),(se=he.nextSibling)!==null)break;he=oe,oe=he.parentNode}he=se}l=M===-1||I===-1?null:{start:M,end:I}}else l=null}l=l||{start:0,end:0}}else l=null;for(eA={focusedElem:a,selectionRange:l},eh=!1,Fn=i;Fn!==null;)if(i=Fn,a=i.child,(i.subtreeFlags&1028)!==0&&a!==null)a.return=i,Fn=a;else for(;Fn!==null;){switch(i=Fn,_=i.alternate,a=i.flags,i.tag){case 0:if((a&4)!==0&&(a=i.updateQueue,a=a!==null?a.events:null,a!==null))for(l=0;l title"))),On(_,h,l),_[jn]=a,Dn(_),h=_;break e;case"link":var D=QD("link","href",v).get(h+(l.href||""));if(D){for(var M=0;MMt&&(D=Mt,Mt=Pe,Pe=D);var Z=q6(M,Pe),H=q6(M,Mt);if(Z&&H&&(se.rangeCount!==1||se.anchorNode!==Z.node||se.anchorOffset!==Z.offset||se.focusNode!==H.node||se.focusOffset!==H.offset)){var ne=he.createRange();ne.setStart(Z.node,Z.offset),se.removeAllRanges(),Pe>Mt?(se.addRange(ne),se.extend(H.node,H.offset)):(ne.setEnd(H.node,H.offset),se.addRange(ne))}}}}for(he=[],se=M;se=se.parentNode;)se.nodeType===1&&he.push({element:se,left:se.scrollLeft,top:se.scrollTop});for(typeof M.focus=="function"&&M.focus(),M=0;Ml?32:l,j.T=null,l=Ov,Ov=null;var _=bi,D=Bo;if(wn=0,Ju=bi=null,Bo=0,(Ct&6)!==0)throw Error(r(331));var M=Ct;if(Ct|=4,ZS(_.current),YS(_,_.current,D,l),Ct=M,Ic(0,!1),Ee&&typeof Ee.onPostCommitFiberRoot=="function")try{Ee.onPostCommitFiberRoot(ve,_)}catch{}return!0}finally{G.p=v,j.T=h,hD(a,i)}}function pD(a,i,l){i=oa(l,i),i=Av(a.stateNode,i,2),a=hi(a,i,2),a!==null&&(an(a,2),eo(a))}function Ft(a,i,l){if(a.tag===3)pD(a,a,l);else for(;i!==null;){if(i.tag===3){pD(i,a,l);break}else if(i.tag===1){var h=i.stateNode;if(typeof i.type.getDerivedStateFromError=="function"||typeof h.componentDidCatch=="function"&&(yi===null||!yi.has(h))){a=oa(l,a),l=gS(2),h=hi(i,l,2),h!==null&&(vS(l,h,i,a),an(h,2),eo(h));break}}i=i.return}}function Hv(a,i,l){var h=a.pingCache;if(h===null){h=a.pingCache=new lQ;var v=new Set;h.set(i,v)}else v=h.get(i),v===void 0&&(v=new Set,h.set(i,v));v.has(l)||(jv=!0,v.add(l),a=mQ.bind(null,a,i,l),i.then(a,a))}function mQ(a,i,l){var h=a.pingCache;h!==null&&h.delete(i),a.pingedLanes|=a.suspendedLanes&l,a.warmLanes&=~l,zt===a&&(ht&l)===l&&(ln===4||ln===3&&(ht&62914560)===ht&&300>Kn()-P0?(Ct&2)===0&&el(a,0):Pv|=l,$u===ht&&($u=0)),eo(a)}function gD(a,i){i===0&&(i=Zn()),a=hs(a,i),a!==null&&(an(a,i),eo(a))}function pQ(a){var i=a.memoizedState,l=0;i!==null&&(l=i.retryLane),gD(a,l)}function gQ(a,i){var l=0;switch(a.tag){case 31:case 13:var h=a.stateNode,v=a.memoizedState;v!==null&&(l=v.retryLane);break;case 19:h=a.stateNode;break;case 22:h=a.stateNode._retryCache;break;default:throw Error(r(314))}h!==null&&h.delete(i),gD(a,l)}function vQ(a,i){return ni(a,i)}var H0=null,nl=null,Qv=!1,Q0=!1,Gv=!1,_i=0;function eo(a){a!==nl&&a.next===null&&(nl===null?H0=nl=a:nl=nl.next=a),Q0=!0,Qv||(Qv=!0,yQ())}function Ic(a,i){if(!Gv&&Q0){Gv=!0;do for(var l=!1,h=H0;h!==null;){if(a!==0){var v=h.pendingLanes;if(v===0)var _=0;else{var D=h.suspendedLanes,M=h.pingedLanes;_=(1<<31-ct(42|a)+1)-1,_&=v&~(D&~M),_=_&201326741?_&201326741|1:_?_|2:0}_!==0&&(l=!0,bD(h,_))}else _=ht,_=Ie(h,h===zt?_:0,h.cancelPendingCommit!==null||h.timeoutHandle!==-1),(_&3)===0||Pt(h,_)||(l=!0,bD(h,_));h=h.next}while(l);Gv=!1}}function AQ(){vD()}function vD(){Q0=Qv=!1;var a=0;_i!==0&&RQ()&&(a=_i);for(var i=Kn(),l=null,h=H0;h!==null;){var v=h.next,_=AD(h,i);_===0?(h.next=null,l===null?H0=v:l.next=v,v===null&&(nl=l)):(l=h,(a!==0||(_&3)!==0)&&(Q0=!0)),h=v}wn!==0&&wn!==5||Ic(a),_i!==0&&(_i=0)}function AD(a,i){for(var l=a.suspendedLanes,h=a.pingedLanes,v=a.expirationTimes,_=a.pendingLanes&-62914561;0<_;){var D=31-ct(_),M=1<M)break;var ce=I.transferSize,he=I.initiatorType;ce&&FD(he)&&(I=I.responseEnd,D+=ce*(I"u"?null:document;function ID(a,i,l){var h=rl;if(h&&typeof i=="string"&&i){var v=ra(i);v='link[rel="'+a+'"][href="'+v+'"]',typeof l=="string"&&(v+='[crossorigin="'+l+'"]'),OD.has(v)||(OD.add(v),a={rel:a,crossOrigin:l,href:i},h.querySelector(v)===null&&(i=h.createElement("link"),On(i,"link",a),Dn(i),h.head.appendChild(i)))}}function LQ(a){ko.D(a),ID("dns-prefetch",a,null)}function OQ(a,i){ko.C(a,i),ID("preconnect",a,i)}function IQ(a,i,l){ko.L(a,i,l);var h=rl;if(h&&a&&i){var v='link[rel="preload"][as="'+ra(i)+'"]';i==="image"&&l&&l.imageSrcSet?(v+='[imagesrcset="'+ra(l.imageSrcSet)+'"]',typeof l.imageSizes=="string"&&(v+='[imagesizes="'+ra(l.imageSizes)+'"]')):v+='[href="'+ra(a)+'"]';var _=v;switch(i){case"style":_=al(a);break;case"script":_=ol(a)}da.has(_)||(a=g({rel:"preload",href:i==="image"&&l&&l.imageSrcSet?void 0:a,as:i},l),da.set(_,a),h.querySelector(v)!==null||i==="style"&&h.querySelector(Qc(_))||i==="script"&&h.querySelector(Gc(_))||(i=h.createElement("link"),On(i,"link",a),Dn(i),h.head.appendChild(i)))}}function UQ(a,i){ko.m(a,i);var l=rl;if(l&&a){var h=i&&typeof i.as=="string"?i.as:"script",v='link[rel="modulepreload"][as="'+ra(h)+'"][href="'+ra(a)+'"]',_=v;switch(h){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":_=ol(a)}if(!da.has(_)&&(a=g({rel:"modulepreload",href:a},i),da.set(_,a),l.querySelector(v)===null)){switch(h){case"audioworklet":case"paintworklet":case"serviceworker":case"sharedworker":case"worker":case"script":if(l.querySelector(Gc(_)))return}h=l.createElement("link"),On(h,"link",a),Dn(h),l.head.appendChild(h)}}}function VQ(a,i,l){ko.S(a,i,l);var h=rl;if(h&&a){var v=Su(h).hoistableStyles,_=al(a);i=i||"default";var D=v.get(_);if(!D){var M={loading:0,preload:null};if(D=h.querySelector(Qc(_)))M.loading=5;else{a=g({rel:"stylesheet",href:a,"data-precedence":i},l),(l=da.get(_))&&sA(a,l);var I=D=h.createElement("link");Dn(I),On(I,"link",a),I._p=new Promise(function(re,ce){I.onload=re,I.onerror=ce}),I.addEventListener("load",function(){M.loading|=1}),I.addEventListener("error",function(){M.loading|=2}),M.loading|=4,Z0(D,i,h)}D={type:"stylesheet",instance:D,count:1,state:M},v.set(_,D)}}}function HQ(a,i){ko.X(a,i);var l=rl;if(l&&a){var h=Su(l).hoistableScripts,v=ol(a),_=h.get(v);_||(_=l.querySelector(Gc(v)),_||(a=g({src:a,async:!0},i),(i=da.get(v))&&uA(a,i),_=l.createElement("script"),Dn(_),On(_,"link",a),l.head.appendChild(_)),_={type:"script",instance:_,count:1,state:null},h.set(v,_))}}function QQ(a,i){ko.M(a,i);var l=rl;if(l&&a){var h=Su(l).hoistableScripts,v=ol(a),_=h.get(v);_||(_=l.querySelector(Gc(v)),_||(a=g({src:a,async:!0,type:"module"},i),(i=da.get(v))&&uA(a,i),_=l.createElement("script"),Dn(_),On(_,"link",a),l.head.appendChild(_)),_={type:"script",instance:_,count:1,state:null},h.set(v,_))}}function UD(a,i,l,h){var v=(v=me.current)?q0(v):null;if(!v)throw Error(r(446));switch(a){case"meta":case"title":return null;case"style":return typeof l.precedence=="string"&&typeof l.href=="string"?(i=al(l.href),l=Su(v).hoistableStyles,h=l.get(i),h||(h={type:"style",instance:null,count:0,state:null},l.set(i,h)),h):{type:"void",instance:null,count:0,state:null};case"link":if(l.rel==="stylesheet"&&typeof l.href=="string"&&typeof l.precedence=="string"){a=al(l.href);var _=Su(v).hoistableStyles,D=_.get(a);if(D||(v=v.ownerDocument||v,D={type:"stylesheet",instance:null,count:0,state:{loading:0,preload:null}},_.set(a,D),(_=v.querySelector(Qc(a)))&&!_._p&&(D.instance=_,D.state.loading=5),da.has(a)||(l={rel:"preload",as:"style",href:l.href,crossOrigin:l.crossOrigin,integrity:l.integrity,media:l.media,hrefLang:l.hrefLang,referrerPolicy:l.referrerPolicy},da.set(a,l),_||GQ(v,a,l,D.state))),i&&h===null)throw Error(r(528,""));return D}if(i&&h!==null)throw Error(r(529,""));return null;case"script":return i=l.async,l=l.src,typeof l=="string"&&i&&typeof i!="function"&&typeof i!="symbol"?(i=ol(l),l=Su(v).hoistableScripts,h=l.get(i),h||(h={type:"script",instance:null,count:0,state:null},l.set(i,h)),h):{type:"void",instance:null,count:0,state:null};default:throw Error(r(444,a))}}function al(a){return'href="'+ra(a)+'"'}function Qc(a){return'link[rel="stylesheet"]['+a+"]"}function VD(a){return g({},a,{"data-precedence":a.precedence,precedence:null})}function GQ(a,i,l,h){a.querySelector('link[rel="preload"][as="style"]['+i+"]")?h.loading=1:(i=a.createElement("link"),h.preload=i,i.addEventListener("load",function(){return h.loading|=1}),i.addEventListener("error",function(){return h.loading|=2}),On(i,"link",l),Dn(i),a.head.appendChild(i))}function ol(a){return'[src="'+ra(a)+'"]'}function Gc(a){return"script[async]"+a}function HD(a,i,l){if(i.count++,i.instance===null)switch(i.type){case"style":var h=a.querySelector('style[data-href~="'+ra(l.href)+'"]');if(h)return i.instance=h,Dn(h),h;var v=g({},l,{"data-href":l.href,"data-precedence":l.precedence,href:null,precedence:null});return h=(a.ownerDocument||a).createElement("style"),Dn(h),On(h,"style",v),Z0(h,l.precedence,a),i.instance=h;case"stylesheet":v=al(l.href);var _=a.querySelector(Qc(v));if(_)return i.state.loading|=4,i.instance=_,Dn(_),_;h=VD(l),(v=da.get(v))&&sA(h,v),_=(a.ownerDocument||a).createElement("link"),Dn(_);var D=_;return D._p=new Promise(function(M,I){D.onload=M,D.onerror=I}),On(_,"link",h),i.state.loading|=4,Z0(_,l.precedence,a),i.instance=_;case"script":return _=ol(l.src),(v=a.querySelector(Gc(_)))?(i.instance=v,Dn(v),v):(h=l,(v=da.get(_))&&(h=g({},l),uA(h,v)),a=a.ownerDocument||a,v=a.createElement("script"),Dn(v),On(v,"link",h),a.head.appendChild(v),i.instance=v);case"void":return null;default:throw Error(r(443,i.type))}else i.type==="stylesheet"&&(i.state.loading&4)===0&&(h=i.instance,i.state.loading|=4,Z0(h,l.precedence,a));return i.instance}function Z0(a,i,l){for(var h=l.querySelectorAll('link[rel="stylesheet"][data-precedence],style[data-precedence]'),v=h.length?h[h.length-1]:null,_=v,D=0;D title"):null)}function YQ(a,i,l){if(l===1||i.itemProp!=null)return!1;switch(a){case"meta":case"title":return!0;case"style":if(typeof i.precedence!="string"||typeof i.href!="string"||i.href==="")break;return!0;case"link":if(typeof i.rel!="string"||typeof i.href!="string"||i.href===""||i.onLoad||i.onError)break;return i.rel==="stylesheet"?(a=i.disabled,typeof i.precedence=="string"&&a==null):!0;case"script":if(i.async&&typeof i.async!="function"&&typeof i.async!="symbol"&&!i.onLoad&&!i.onError&&i.src&&typeof i.src=="string")return!0}return!1}function YD(a){return!(a.type==="stylesheet"&&(a.state.loading&3)===0)}function KQ(a,i,l,h){if(l.type==="stylesheet"&&(typeof h.media!="string"||matchMedia(h.media).matches!==!1)&&(l.state.loading&4)===0){if(l.instance===null){var v=al(h.href),_=i.querySelector(Qc(v));if(_){i=_._p,i!==null&&typeof i=="object"&&typeof i.then=="function"&&(a.count++,a=X0.bind(a),i.then(a,a)),l.state.loading|=4,l.instance=_,Dn(_);return}_=i.ownerDocument||i,h=VD(h),(v=da.get(v))&&sA(h,v),_=_.createElement("link"),Dn(_);var D=_;D._p=new Promise(function(M,I){D.onload=M,D.onerror=I}),On(_,"link",h),l.instance=_}a.stylesheets===null&&(a.stylesheets=new Map),a.stylesheets.set(l,i),(i=l.state.preload)&&(l.state.loading&3)===0&&(a.count++,l=X0.bind(a),i.addEventListener("load",l),i.addEventListener("error",l))}}var lA=0;function qQ(a,i){return a.stylesheets&&a.count===0&&J0(a,a.stylesheets),0lA?50:800)+i);return a.unsuspend=l,function(){a.unsuspend=null,clearTimeout(h),clearTimeout(v)}}:null}function X0(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)J0(this,this.stylesheets);else if(this.unsuspend){var a=this.unsuspend;this.unsuspend=null,a()}}}var $0=null;function J0(a,i){a.stylesheets=null,a.unsuspend!==null&&(a.count++,$0=new Map,i.forEach(ZQ,a),$0=null,X0.call(a))}function ZQ(a,i){if(!(i.state.loading&4)){var l=$0.get(a);if(l)var h=l.get(null);else{l=new Map,$0.set(a,l);for(var v=a.querySelectorAll("link[data-precedence],style[data-precedence]"),_=0;_"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(e)}catch(t){console.error(t)}}return e(),fh.exports=b9(),fh.exports}var _9=x9();function C9(){const e=history.pushState,t=history.replaceState,n=(r,o,s)=>new CustomEvent("nextjs:routeChange",{detail:{data:r,unused:o,url:s}});history.pushState=function(...r){e.apply(this,r),window.dispatchEvent(n(...r))},history.replaceState=function(...r){t.apply(this,r),window.dispatchEvent(n(...r))}}function w9(e){window.addEventListener("nextjs:routeChange",e),window.addEventListener("popstate",e)}function E9(e){window.removeEventListener("nextjs:routeChange",e),window.removeEventListener("popstate",e)}const DA=async()=>{const[e,t]=await Promise.all([Promise.resolve().then(()=>QU),Promise.resolve().then(()=>AV)]);return{...e,...t}},FA={"domain-table-view":{LazyComponent:null,componentKey:"DomainTableView"},"sso-provider-create":{LazyComponent:null,componentKey:"SsoProviderCreateView"},"sso-provider-edit":{LazyComponent:null,componentKey:"SsoProviderEditView"},"sso-provider-table":{LazyComponent:null,componentKey:"SsoProviderTableView"},"organization-details-edit":{LazyComponent:null,componentKey:"OrganizationDetailsEditView"},"user-mfa-management":{LazyComponent:null,componentKey:"UserMFAMgmtView"}};Object.entries(FA).forEach(([,e])=>{e.LazyComponent=C.lazy(()=>DA().then(t=>({default:t[e.componentKey]})))});function gh(){const e=document.documentElement;return(e.style.colorScheme||getComputedStyle(e).colorScheme||"light")==="dark"?"dark":"light"}const S9=[{id:"domain_abc123xyz456",org_id:"org_abc123xyz456",domain:"example.auth0.com",status:"pending",verification_txt:"auth0-domain-verification=abc123xyz456def789",verification_host:"_auth0-challenge.example.auth0.com"},{id:"domain_def789abc123",org_id:"org_abc123xyz456",domain:"verified.auth0.com",status:"verified"},{id:"domain_def789abc679",org_id:"org_abc123xyz456",domain:"testdocs.auth0.com",status:"verified"}],D9=[{id:"con_test123",display_name:"Test Provider",strategy:"samlp",name:"test-provider",is_associated:!1}],Mo=(e=800)=>new Promise(t=>setTimeout(t,e)),RA=e=>({id:`domain_${Date.now()}`,org_id:"org_abc123xyz456",domain:e,status:"pending",verification_txt:`auth0-domain-verification=${Date.now()}`,verification_host:`_auth0-challenge.${e}`}),F9=()=>{const[e,t]=C.useState(null),[n,r]=C.useState(void 0),[o,s]=C.useState(S9),[u,c]=C.useState(!1),[d,p]=C.useState(!1),[m,g]=C.useState(!1);return{logic:{domains:o,providers:D9,isCreating:u,isVerifying:m,isFetching:!1,isLoadingProviders:!1,isDeleting:d,schema:void 0,styling:{variables:{common:{},light:{},dark:{}},classes:{}},hideHeader:!1,readOnly:!1,customMessages:{},createAction:void 0,onOpenProvider:void 0,onCreateProvider:void 0,fetchProviders:async()=>{},fetchDomains:async()=>o,onCreateDomain:async w=>{c(!0),await Mo();const b=RA(w);return s(x=>[...x,b]),c(!1),b},onVerifyDomain:async w=>(g(!0),await Mo(),s(b=>b.map(x=>x.id===w.id?{...x,status:"verified"}:x)),g(!1),!0),onDeleteDomain:async w=>{p(!0),await Mo(),s(b=>b.filter(x=>x.id!==w.id)),p(!1)},onAssociateToProvider:async()=>await Mo(),onDeleteFromProvider:async()=>await Mo()},handlers:{verifyError:n,selectedDomain:e,handleCreate:async w=>{c(!0),await Mo(),s(b=>[...b,RA(w)]),c(!1)},handleVerify:async w=>{g(!0),await Mo(),s(b=>b.map(x=>x.id===w.id?{...x,status:"verified"}:x)),g(!1)},handleDelete:async w=>{p(!0),await Mo(),s(b=>b.filter(x=>x.id!==w.id)),p(!1)},handleToggleSwitch:async()=>{},handleCloseVerifyModal:()=>{r(void 0)},handleCreateClick:async()=>!1,handleConfigureClick:async w=>{t(w)},handleVerifyClick:async w=>{t(w)},handleDeleteClick:async w=>{t(w)}}}},R9=()=>({...{organization:{id:"org_123",name:"auth0-corp",display_name:"Auth0 Corporation",branding:{colors:{primary:"#000",page_background:"#fff"},logo_url:""},metadata:{}},isLoading:!1,isFetchLoading:!1,isSaveLoading:!1,updateOrgDetails:async()=>!0,formActions:{isLoading:!1,nextAction:{disabled:!1,onClick:async()=>!0}},schema:void 0,styling:{variables:{common:{},light:{},dark:{}},classes:{}},customMessages:{header:{title:"Organization Settings"},details:{}},readOnly:!1,hideHeader:!1}}),B9=["samlp","oidc"],k9={organization:{name:"Organization",id:"mock-org-id",can_set_show_as_button:!0,can_set_assign_membership_on_login:!0},strategies:{samlp:{fields:[{name:"entryPoint",label:"Entry Point",type:"text",required:!0},{name:"issuer",label:"Issuer",type:"text",required:!0}],helpText:"Enter your SAML provider details.",provisioning_methods:[],enabled_features:[]},oidc:{fields:[{name:"clientId",label:"Client ID",type:"text",required:!0},{name:"clientSecret",label:"Client Secret",type:"password",required:!0},{name:"issuer",label:"Issuer",type:"text",required:!0}],helpText:"Enter your OIDC provider details.",provisioning_methods:[],enabled_features:[]},adfs:{provisioning_methods:[],enabled_features:[]},"google-apps":{provisioning_methods:[],enabled_features:[]},facebook:{provisioning_methods:[],enabled_features:[]},github:{provisioning_methods:[],enabled_features:[]},linkedin:{provisioning_methods:[],enabled_features:[]},okta:{provisioning_methods:[],enabled_features:[]},pingfederate:{provisioning_methods:[],enabled_features:[]},waad:{provisioning_methods:[],enabled_features:[]}}},M9={current:{validate:async()=>!0,getData:()=>({name:"mock-name",display_name:"Display Name"}),isDirty:()=>!1,reset:()=>{}}},N9={current:{validate:async()=>!0,getData:()=>({clientId:"mock-client-id",clientSecret:"mock-client-secret",issuer:"mock-issuer"}),isDirty:()=>!1,reset:()=>{}}},T9=()=>{const[e,t]=C.useState({});return{logic:{styling:{variables:{common:{},light:{},dark:{}},classes:{}},customMessages:{provider_select:{},provider_details:{},provider_configure:{}},backButton:void 0,isCreating:!1,currentStyles:{variables:{},classes:{}},t:o=>o,strategy:e.strategy,details:e.details,configure:e.configure,isLoadingConfig:!1,filteredStrategies:B9,isLoadingIdpConfig:!1,idpConfig:k9,isDarkMode:!1,formData:e,wizardSteps:[]},handlers:{onNext:()=>!0,onPrevious:()=>!0,setFormData:t,detailsRef:M9,configureRef:N9,handleCreate:async()=>{console.log("Provider created!")},createStepActions:()=>({onNextAction:async()=>!0,onPreviousAction:async()=>!0})}}},j9=()=>{const e={id:"test-provider-id",name:"Provider Name",is_enabled:!0,strategy:"waad",options:{}},t={scim_url:"https://scim.example.com",scim_token:"mock-scim-token",status:"active",last_synced:"2024-06-01T12:00:00Z"},n=[{id:"token-1",value:"scim-token-1",created_at:"2024-06-01T12:00:00Z"},{id:"token-2",value:"scim-token-2",created_at:"2024-06-02T12:00:00Z"}],r={styling:{variables:{common:{},light:{},dark:{}},classes:{}},activeTab:"sso",schema:void 0,readOnly:!0,providerId:"mock-provider-id",domains:void 0,hideHeader:!1,currentStyles:{variables:{},classes:{}},provider:e,organization:{name:"Org",branding:{colors:{primary:"",page_background:""},logo_url:void 0}},isLoading:!1,isUpdating:!1,isDeleting:!1,isRemoving:!1,idpConfig:{organization:{can_set_show_as_button:!1,can_set_assign_membership_on_login:!1},strategies:{waad:{provisioning_methods:[],enabled_features:[]},adfs:{provisioning_methods:[],enabled_features:[]},"google-apps":{provisioning_methods:[],enabled_features:[]},oidc:{provisioning_methods:[],enabled_features:[]},samlp:{provisioning_methods:[],enabled_features:[]},okta:{provisioning_methods:[],enabled_features:[]},pingfederate:{provisioning_methods:[],enabled_features:[]}}},customMessages:{},backButton:void 0,shouldAllowDeletion:!0,isLoadingConfig:!1,isLoadingIdpConfig:!1,showProvisioningTab:!0,isProvisioningUpdating:!1,isProvisioningDeleting:!1,isScimTokensLoading:!1,isScimTokenCreating:!1,isScimTokenDeleting:!1,isSsoAttributesSyncing:!1,isProvisioningAttributesSyncing:!1,hasSsoAttributeSyncWarning:!1,hasProvisioningAttributeSyncWarning:!1,provisioningConfig:t,scimTokens:n,t:s=>s};return{logic:r,handlers:{setActiveTab:()=>{},updateProvider:async()=>{},createProvisioningAction:async()=>{r.provisioningConfig=t},deleteProvisioningAction:async()=>(r.provisioningConfig=void 0,!0),listScimTokens:async()=>n,createScimTokenAction:async()=>{r.scimTokens.push({id:`token-${r.scimTokens.length+1}`,value:`scim-token-${r.scimTokens.length+1}`,created_at:new Date().toISOString()})},deleteScimTokenAction:async s=>(r.scimTokens=r.scimTokens.filter(u=>u.id!==s),!0),syncSsoAttributes:async()=>{},syncProvisioningAttributes:async()=>{},onDeleteConfirm:async()=>{},onRemoveConfirm:async()=>{},handleToggleProvider:async()=>{r.provider.is_enabled=!r.provider.is_enabled},fetchProvisioning:async()=>(r.provisioningConfig=t,t)}}},P9=[{id:"test-provider-id",name:"Provider Name",display_name:"WAAD Provider 1",is_enabled:!0,strategy:"waad",options:{}},{id:"waad-2",name:"waad-2",display_name:"WAAD Provider 2",strategy:"waad",is_enabled:!0,options:{}},{id:"waad-3",name:"waad-3",display_name:"WAAD Provider 3",strategy:"waad",is_enabled:!0,options:{}}],z9={"domain-table-view":F9,"sso-provider-create":T9,"sso-provider-edit":j9,"sso-provider-table":()=>{const[e,t]=C.useState(P9),[n,r]=C.useState(null),[o,s]=C.useState(!1),[u,c]=C.useState(!1);return{logic:{data:e,isLoading:!1,styling:{variables:{common:{},light:{},dark:{}},classes:{}},customMessages:{},hideHeader:!1,readOnly:!1,shouldHideCreate:!1,isViewLoading:!1,createAction:{disabled:!1,onAfter:()=>!0,onBefore:()=>!0},selectedIdp:n,organization:null,isDeleting:o,isRemoving:u,editAction:{disabled:!1,onAfter:()=>!0,onBefore:()=>!0},isUpdating:!1,isUpdatingId:null,shouldAllowDeletion:!0},handlers:{handleCreate:()=>{console.log("Navigate to SSO Provider Create Page")},handleEdit:()=>{console.log("Navigate to SSO Provider Edit Page")},handleDelete:E=>{r(E)},handleDeleteFromOrganization:E=>{r(E)},handleToggleEnabled:(E,S)=>{t(F=>F.map(R=>R.id===E.id?{...R,is_enabled:S}:R))},handleDeleteConfirm:async E=>{s(!0),setTimeout(()=>{t(S=>S.filter(F=>F.id!==E.id)),s(!1),r(null)},700)},handleRemoveConfirm:async E=>{c(!0),setTimeout(()=>{t(S=>S.filter(F=>F.id!==E.id)),c(!1),r(null)},700)},setSelectedIdp:r}}},"organization-details-edit":R9,"user-mfa-management":()=>({logic:{error:null,schema:{email:/^[^@]+@[^@]+\.[^@]+$/,phone:/^\d{10,}$/},isLoading:!1,isDeleting:!1,styling:{},customMessages:{},hideHeader:!1,showActiveOnly:!1,disableEnroll:!1,disableDelete:!1,readOnly:!1,factorConfig:void 0,dialogOpen:!1,enrollFactor:null,isDeleteDialogOpen:!1,factorToDelete:null,factorsByType:{email:[],phone:[],"push-notification":[],"webauthn-roaming":[],"webauthn-platform":[],"recovery-code":[],totp:[]},visibleFactorTypes:["email","phone","push-notification","webauthn-roaming","webauthn-platform","recovery-code","totp"],hasNoActiveFactors:!0,confirmEnrollment:async()=>{}},handlers:{enrollMfa:async(n,r)=>({id:"mock-id",type:n,status:"enrolled",recovery_code:"mock-recovery-code",auth_session:"mock-auth-session",...r}),onEnrollFactor:()=>{},onDeleteFactor:async()=>{},handleCloseDialog:()=>{},handleEnrollSuccess:()=>{},handleEnrollError:()=>{},handleConfirmDelete:async()=>{},setIsDeleteDialogOpen:()=>{}}})};function L9(e){const t=z9[e];return t?t():(console.warn(`No mock logic found for "${e}"`),{logic:{},handlers:{}})}let vh=null;const Ri=new Map;let Ah=!1,dl=null,fl=null,yh=null;async function O9(){return vh||(vh=await DA()),vh}function I9({useCoreClient:e,children:t,fallback:n}){const{coreClient:r}=e();return r?f.jsx(f.Fragment,{children:t}):f.jsx(f.Fragment,{children:n})}async function U9(e){const t=FA[e];if(!t)return null;const n=await O9(),{Auth0ComponentProvider:r,useCoreClient:o}=n,s=n[t.componentKey];if(!s)return console.error(`Component "${t.componentKey}" not found in module`),null;function u(c){const d=L9(e),p=gh();return f.jsx(r,{domain:"your-tenant.auth0.com",themeSettings:{theme:"default",mode:p},toastSettings:{provider:"custom",methods:{}},previewMode:!0,...c,children:f.jsx(I9,{useCoreClient:o,fallback:f.jsx("div",{children:"Initializing..."}),children:f.jsx(s,{logic:d?.logic,handlers:d?.handlers,...d})})})}return u}function BA(){Ri.forEach(e=>{e.unmount()}),Ri.clear()}async function V9(e,t,n){if(Ri.has(t))return;const r=await U9(e);if(!r){console.error(`Component "${e}" not found`);return}const o=_9.createRoot(t);o.render(f.jsx(C.StrictMode,{children:f.jsx(r,{...n})})),Ri.set(t,o)}async function Wc(){if(Ah)return;Ah=!0,Ri.forEach((t,n)=>{document.body.contains(n)||(t.unmount(),Ri.delete(n))});const e=document.querySelectorAll("[data-uc-component]");for(const t of e){if(Ri.has(t))continue;const n=t.dataset.ucComponent;if(!n)continue;let r={};try{r=t.dataset.ucProps?JSON.parse(t.dataset.ucProps):{}}catch(o){console.error("Failed to parse props:",o)}await V9(n,t,r)}Ah=!1}function kA(){dl&&(E9(dl),dl=null),fl&&(fl.disconnect(),fl=null),BA()}function H9(){yh=gh(),fl=new MutationObserver(()=>{const e=gh();yh!==e&&(yh=e,BA(),setTimeout(Wc,100))}),fl.observe(document.documentElement,{attributes:!0,attributeFilter:["style","class","data-theme"]})}function Q9(){C9(),dl=()=>{setTimeout(Wc,500)},w9(dl),H9(),document.readyState==="complete"?setTimeout(Wc,500):window.addEventListener("load",()=>setTimeout(Wc,500))}window.addEventListener("beforeunload",kA),window.addEventListener("unload",kA),Q9();var G9=e=>t=>{var n=e[t];if(n)return n();throw new Error("Module not found in bundle: "+t)},Y9=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};const Jt={get:e=>Y9(void 0,void 0,void 0,function*(){return typeof e=="function"?e():e})};var K9=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};const hl={get:(e,t)=>K9(void 0,void 0,void 0,function*(){return typeof e=="function"?e(t):e})},Xc=(e,t,n)=>JSON.stringify(e,t,n);function bh(e,t){return JSON.parse(e,t)}const q9={arrayFormat:"indices",encode:!0};function MA(e,t){if(e===void 0||e===null)return"";const n=String(e);return t?encodeURIComponent(n):n}function xh(e,t="",n){const r=[];for(const[o,s]of Object.entries(e)){const u=t?`${t}[${o}]`:o;if(s!==void 0)if(Array.isArray(s)){if(s.length===0)continue;for(let c=0;ce.body,arrayBuffer:e.arrayBuffer.bind(e),blob:e.blob.bind(e)};return"bytes"in e&&typeof e.bytes=="function"&&(t.bytes=e.bytes.bind(e)),t}function X9(e){return e.body!=null}var $9=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};function TA(e,t){return $9(this,void 0,void 0,function*(){if(!X9(e))return;switch(t){case"binary-response":return W9(e);case"blob":return yield e.blob();case"arrayBuffer":return yield e.arrayBuffer();case"sse":return e.body;case"streaming":return e.body;case"text":return yield e.text()}const n=yield e.text();if(n.length>0)try{return bh(n)}catch{return{ok:!1,error:{reason:"non-json",statusCode:e.status,rawBody:n}}}})}var J9=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};function e8(e){return J9(this,void 0,void 0,function*(){var t,n,r;let o=(t=e.headers.get("Content-Type"))===null||t===void 0?void 0:t.toLowerCase();if(o==null||o.length===0)return TA(e);switch(o.indexOf(";")!==-1&&(o=(r=(n=o.split(";")[0])===null||n===void 0?void 0:n.trim())!==null&&r!==void 0?r:""),o){case"application/hal+json":case"application/json":case"application/ld+json":case"application/problem+json":case"application/vnd.api+json":case"text/json":const s=yield e.text();return s.length>0?bh(s):void 0;default:if(o.startsWith("application/vnd.")&&o.endsWith("+json")){const u=yield e.text();return u.length>0?bh(u):void 0}return yield e.text()}})}var t8=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};function n8(){return t8(this,void 0,void 0,function*(){return fetch})}var r8=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};function a8(e){return r8(this,arguments,void 0,function*({body:t,type:n}){return n==="form"?NA(t,{arrayFormat:"repeat",encode:!0}):n.includes("json")?Xc(t):t})}const o8="timeout";function i8(e){const t=new AbortController,n=setTimeout(()=>t.abort(o8),e);return{signal:t.signal,abortId:n}}function s8(...e){const t=e.length===1&&Array.isArray(e[0])?e[0]:e,n=new AbortController;for(const r of t){if(r.aborted){n.abort(r?.reason);break}r.addEventListener("abort",()=>n.abort(r?.reason),{signal:n.signal})}return n.signal}var u8=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};const l8=(e,t,n,r,o,s,u,c,d)=>u8(void 0,void 0,void 0,function*(){const p=[];let m;if(s!=null){const{signal:A,abortId:w}=i8(s);m=w,p.push(A)}u!=null&&p.push(u);let g=s8(p);const y=yield e(t,{method:n,headers:r,body:o,signal:g,credentials:c?"include":void 0,duplex:d});return m!=null&&clearTimeout(m),y});let $c;typeof globalThis.Headers<"u"?$c=globalThis.Headers:$c=class i9{constructor(t){if(this.headers=new Map,t)if(t instanceof i9)t.forEach((n,r)=>this.append(r,n));else if(Array.isArray(t))for(const[n,r]of t)if(typeof n=="string"&&typeof r=="string")this.append(n,r);else throw new TypeError("Each header entry must be a [string, string] tuple");else for(const[n,r]of Object.entries(t))if(typeof r=="string")this.append(n,r);else throw new TypeError("Header values must be strings")}append(t,n){const r=t.toLowerCase(),o=this.headers.get(r)||[];this.headers.set(r,[...o,n])}delete(t){const n=t.toLowerCase();this.headers.delete(n)}get(t){const n=t.toLowerCase(),r=this.headers.get(n);return r?r.join(", "):null}has(t){const n=t.toLowerCase();return this.headers.has(n)}set(t,n){const r=t.toLowerCase();this.headers.set(r,[n])}forEach(t,n){const r=n?t.bind(n):t;this.headers.forEach((o,s)=>r(o.join(", "),s,this))}getSetCookie(){return this.headers.get("set-cookie")||[]}*entries(){for(const[t,n]of this.headers.entries())yield[t,n.join(", ")]}*keys(){yield*this.headers.keys()}*values(){for(const t of this.headers.values())yield t.join(", ")}[Symbol.iterator](){return this.entries()}};const jA={headers:new $c,redirected:!1,status:499,statusText:"Client Closed Request",type:"error",url:""},PA={headers:new $c,redirected:!1,status:0,statusText:"Unknown Error",type:"error",url:""};function zA(e){return{headers:e.headers,redirected:e.redirected,status:e.status,statusText:e.statusText,type:e.type,url:e.url}}var c8=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};const d8=1e3,Jc=6e4,f8=2,LA=.2;function h8(e){const t=1+Math.random()*LA;return e*t}function m8(e){const t=1+(Math.random()-.5)*LA;return e*t}function p8(e,t){const n=e.headers.get("Retry-After");if(n){const o=parseInt(n,10);if(!isNaN(o)&&o>0)return Math.min(o*1e3,Jc);const s=new Date(n);if(!isNaN(s.getTime())){const u=s.getTime()-Date.now();if(u>0)return Math.min(Math.max(u,0),Jc)}}const r=e.headers.get("X-RateLimit-Reset");if(r){const o=parseInt(r,10);if(!isNaN(o)){const s=o*1e3-Date.now();if(s>0)return h8(Math.min(s,Jc))}}return m8(Math.min(d8*Math.pow(2,t),Jc))}function g8(e){return c8(this,arguments,void 0,function*(t,n=f8){let r=yield t();for(let o=0;o=500);++o){const s=p8(r,o);yield new Promise(u=>setTimeout(u,s)),r=yield t()}return r})}var _h=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};function v8(e){return _h(this,void 0,void 0,function*(){var t;const n={};if(e.body!==void 0&&e.contentType!=null&&(n["Content-Type"]=e.contentType),e.headers==null)return n;for(const[r,o]of Object.entries(e.headers)){const s=yield hl.get(o,{endpointMetadata:(t=e.endpointMetadata)!==null&&t!==void 0?t:{}});if(typeof s=="string"){n[r]=s;continue}s!=null&&(n[r]=`${s}`)}return n})}function A8(e){return _h(this,void 0,void 0,function*(){var t,n;const r=Z9(e.url,e.queryParameters),o=yield a8({body:e.body,type:(t=e.requestType)!==null&&t!==void 0?t:"other"}),s=(n=e.fetchFn)!==null&&n!==void 0?n:yield n8();try{const u=yield g8(()=>_h(this,void 0,void 0,function*(){return l8(s,r,e.method,yield v8(e),o,e.timeoutMs,e.abortSignal,e.withCredentials,e.duplex)}),e.maxRetries);return u.status>=200&&u.status<400?{ok:!0,body:yield TA(u,e.responseType),headers:u.headers,rawResponse:zA(u)}:{ok:!1,error:{reason:"status-code",statusCode:u.status,body:yield e8(u)},rawResponse:zA(u)}}catch(u){return e.abortSignal!=null&&e.abortSignal.aborted?{ok:!1,error:{reason:"unknown",errorMessage:"The user aborted a request"},rawResponse:jA}:u instanceof Error&&u.name==="AbortError"?{ok:!1,error:{reason:"timeout"},rawResponse:jA}:u instanceof Error?{ok:!1,error:{reason:"unknown",errorMessage:u.message},rawResponse:PA}:{ok:!1,error:{reason:"unknown",errorMessage:Xc(u)},rawResponse:PA}}})}const Ir=A8;var y8=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};let Ur=class sl extends Promise{constructor(t){super(n=>{n(void 0)}),this.innerPromise=t}static fromFunction(t,...n){return new sl(t(...n))}static interceptFunction(t){return(...n)=>sl.fromPromise(t(...n))}static fromPromise(t){return new sl(t)}static fromExecutor(t){const n=new Promise(t);return new sl(n)}static fromResult(t){const n=Promise.resolve(t);return new sl(n)}unwrap(){return this.unwrappedPromise||(this.unwrappedPromise=this.innerPromise.then(({data:t})=>t)),this.unwrappedPromise}then(t,n){return this.unwrap().then(t,n)}catch(t){return this.unwrap().catch(t)}finally(t){return this.unwrap().finally(t)}withRawResponse(){return y8(this,void 0,void 0,function*(){return yield this.innerPromise})}};const Ss=b8();function b8(){var e,t,n,r,o;return typeof window<"u"&&typeof window.document<"u"?{type:"browser",version:window.navigator.userAgent}:typeof globalThis<"u"&&((e=globalThis?.navigator)===null||e===void 0?void 0:e.userAgent)==="Cloudflare-Workers"?{type:"workerd"}:typeof EdgeRuntime=="string"?{type:"edge-runtime"}:typeof self=="object"&&typeof self?.importScripts=="function"&&(((t=self.constructor)===null||t===void 0?void 0:t.name)==="DedicatedWorkerGlobalScope"||((n=self.constructor)===null||n===void 0?void 0:n.name)==="ServiceWorkerGlobalScope"||((r=self.constructor)===null||r===void 0?void 0:r.name)==="SharedWorkerGlobalScope")?{type:"web-worker"}:typeof Deno<"u"&&typeof Deno.version<"u"&&typeof Deno.version.deno<"u"?{type:"deno",version:Deno.version.deno}:typeof Bun<"u"&&typeof Bun.version<"u"?{type:"bun",version:Bun.version}:typeof process<"u"&&"version"in process&&!!process.version&&"versions"in process&&!!(!((o=process.versions)===null||o===void 0)&&o.node)?{type:"node",version:process.versions.node,parsedVersion:Number(process.versions.node.split(".")[0])}:typeof navigator<"u"&&navigator?.product==="ReactNative"?{type:"react-native"}:{type:"unknown"}}function ml(e){if(e===null)return"null";switch(typeof e){case"undefined":return"undefined";case"string":case"number":case"boolean":break;default:e=String(e);break}return encodeURIComponent(e)}function Vr(e,...t){if(!e)return"";if(t.length===0)return e;if(e.includes("://")){let n;try{n=new URL(e)}catch{return OA(e,...t)}const r=t[t.length-1],o=r&&r.endsWith("/");for(const s of t){const u=UA(s);u&&(n.pathname=IA(n.pathname,u))}return o&&!n.pathname.endsWith("/")&&(n.pathname+="/"),n.toString()}return OA(e,...t)}function OA(e,...t){if(t.length===0)return e;let n=e;const r=t[t.length-1],o=r&&r.endsWith("/");for(const s of t){const u=UA(s);u&&(n=IA(n,u))}return o&&!n.endsWith("/")&&(n+="/"),n}function IA(e,t){return e.endsWith("/")?e+t:e+"/"+t}function UA(e){if(!e)return e;let t=0,n=e.length;return e.startsWith("/")&&(t=1),e.endsWith("/")&&(n=e.length-1),t===0&&n===e.length?e:e.slice(t,n)}function x8(e){const t=String.fromCodePoint(...e);return btoa(t)}function _8(e){if(typeof Buffer<"u")return Buffer.from(e,"utf8").toString("base64");const t=new TextEncoder().encode(e);return x8(t)}function VA(e,t,n){if(e==null)return e;const r=t.split(".");if(r.length===0)return e;let o=e;for(let u=0;u1||d(A,b)})},w&&(o[A]=w(o[A])))}function d(A,w){try{p(r[A](w))}catch(b){y(s[0][3],b)}}function p(A){A.value instanceof to?Promise.resolve(A.value.v).then(m,g):y(s[0][2],A)}function m(A){d("next",A)}function g(A){d("throw",A)}function y(A,w){A(w),s.shift(),s.length&&d(s[0][0],s[0][1])}},w8=function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof __values=="function"?__values(e):e[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(s){n[s]=e[s]&&function(u){return new Promise(function(c,d){u=e[s](u),o(c,d,u.done,u.value)})}}function o(s,u,c,d){Promise.resolve(d).then(function(p){s({value:p,done:c})},u)}};let QA=class{constructor({response:t,rawResponse:n,hasNextPage:r,getItems:o,loadPage:s}){this.response=t,this.rawResponse=n,this.data=o(t),this._hasNextPage=r,this.getItems=o,this.loadNextPage=s}getNextPage(){return C8(this,void 0,void 0,function*(){const{data:t,rawResponse:n}=yield this.loadNextPage(this.response).withRawResponse();return this.response=t,this.rawResponse=n,this.data=this.getItems(this.response),this})}hasNextPage(){return this._hasNextPage(this.response)}iterMessages(){return HA(this,arguments,function*(){for(const n of this.data)yield yield to(n);for(;this.hasNextPage();){yield to(this.getNextPage());for(const n of this.data)yield yield to(n)}})}[Symbol.asyncIterator](){return HA(this,arguments,function*(){var n,r,o,s;try{for(var u=!0,c=w8(this.iterMessages()),d;d=yield to(c.next()),n=d.done,!n;u=!0)s=d.value,u=!1,yield yield to(s)}catch(p){r={error:p}}finally{try{!u&&!n&&(o=c.return)&&(yield to(o.call(c)))}finally{if(r)throw r.error}}})}};class Ze extends Error{constructor({message:t,statusCode:n,body:r,rawResponse:o}){super(E8({message:t,statusCode:n,body:r})),Object.setPrototypeOf(this,Ze.prototype),this.statusCode=n,this.body=r,this.rawResponse=o}}function E8({message:e,statusCode:t,body:n}){let r=[];return e!=null&&r.push(e),t!=null&&r.push(`Status code: ${t.toString()}`),n!=null&&r.push(`Body: ${Xc(n,void 0,2)}`),r.join(` +`)}class nr extends Error{constructor(t){super(t),Object.setPrototypeOf(this,nr.prototype)}}let Hr=class s9 extends Ze{constructor(t,n){super({message:"BadRequestError",statusCode:400,body:t,rawResponse:n}),Object.setPrototypeOf(this,s9.prototype)}},Qr=class u9 extends Ze{constructor(t,n){super({message:"UnauthorizedError",statusCode:401,body:t,rawResponse:n}),Object.setPrototypeOf(this,u9.prototype)}},Gr=class l9 extends Ze{constructor(t,n){super({message:"ForbiddenError",statusCode:403,body:t,rawResponse:n}),Object.setPrototypeOf(this,l9.prototype)}},Yr=class c9 extends Ze{constructor(t,n){super({message:"TooManyRequestsError",statusCode:429,body:t,rawResponse:n}),Object.setPrototypeOf(this,c9.prototype)}},S8=class d9 extends Ze{constructor(t,n){super({message:"NotFoundError",statusCode:404,body:t,rawResponse:n}),Object.setPrototypeOf(this,d9.prototype)}};const Kr={Default:"https://auth0.auth0.com/me/v1"};function qr(...e){const t={};for(const[n,r]of e.filter(o=>o!=null).flatMap(o=>Object.entries(o))){const o=n.toLowerCase();r!=null?t[o]=r:o in t&&delete t[o]}return t}function Zr(...e){const t={};for(const[n,r]of e.filter(o=>o!=null).flatMap(o=>Object.entries(o))){const o=n.toLowerCase();r!=null&&(t[o]=r)}return t}var GA=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};class D8{constructor(t){this._options=t}list(t){return Ur.fromPromise(this.__list(t))}__list(t){return GA(this,void 0,void 0,function*(){var n,r,o,s,u,c,d,p,m,g;const y={security:[{"Bearer-DPoP":["read:me:factors"]}]};let A=qr((n=this._options)===null||n===void 0?void 0:n.headers,Zr({Authorization:yield this._getAuthorizationHeader(y)}),t?.headers);const w=yield((r=this._options.fetcher)!==null&&r!==void 0?r:Ir)({url:Vr((s=(o=yield Jt.get(this._options.baseUrl))!==null&&o!==void 0?o:yield Jt.get(this._options.environment))!==null&&s!==void 0?s:Kr.Default,"factors"),method:"GET",headers:A,queryParameters:t?.queryParams,timeoutMs:((d=(u=t?.timeoutInSeconds)!==null&&u!==void 0?u:(c=this._options)===null||c===void 0?void 0:c.timeoutInSeconds)!==null&&d!==void 0?d:60)*1e3,maxRetries:(p=t?.maxRetries)!==null&&p!==void 0?p:(m=this._options)===null||m===void 0?void 0:m.maxRetries,abortSignal:t?.abortSignal,endpointMetadata:y,fetchFn:(g=this._options)===null||g===void 0?void 0:g.fetch});if(w.ok)return{data:w.body,rawResponse:w.rawResponse};if(w.error.reason==="status-code")switch(w.error.statusCode){case 400:throw new Hr(w.error.body,w.rawResponse);case 401:throw new Qr(w.error.body,w.rawResponse);case 403:throw new Gr(w.error.body,w.rawResponse);case 429:throw new Yr(w.error.body,w.rawResponse);default:throw new Ze({statusCode:w.error.statusCode,body:w.error.body,rawResponse:w.rawResponse})}switch(w.error.reason){case"non-json":throw new Ze({statusCode:w.error.statusCode,body:w.error.rawBody,rawResponse:w.rawResponse});case"timeout":throw new nr("Timeout exceeded when calling GET /factors.");case"unknown":throw new Ze({message:w.error.errorMessage,rawResponse:w.rawResponse})}})}_getAuthorizationHeader(t){return GA(this,void 0,void 0,function*(){return`Bearer ${yield hl.get(this._options.token,{endpointMetadata:t})}`})}}var Bi=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};class F8{constructor(t){this._options=t}list(t){return Ur.fromPromise(this.__list(t))}__list(t){return Bi(this,void 0,void 0,function*(){var n,r,o,s,u,c,d,p,m,g;const y={security:[{"Bearer-DPoP":["read:me:authentication_methods"]}]};let A=qr((n=this._options)===null||n===void 0?void 0:n.headers,Zr({Authorization:yield this._getAuthorizationHeader(y)}),t?.headers);const w=yield((r=this._options.fetcher)!==null&&r!==void 0?r:Ir)({url:Vr((s=(o=yield Jt.get(this._options.baseUrl))!==null&&o!==void 0?o:yield Jt.get(this._options.environment))!==null&&s!==void 0?s:Kr.Default,"authentication-methods"),method:"GET",headers:A,queryParameters:t?.queryParams,timeoutMs:((d=(u=t?.timeoutInSeconds)!==null&&u!==void 0?u:(c=this._options)===null||c===void 0?void 0:c.timeoutInSeconds)!==null&&d!==void 0?d:60)*1e3,maxRetries:(p=t?.maxRetries)!==null&&p!==void 0?p:(m=this._options)===null||m===void 0?void 0:m.maxRetries,abortSignal:t?.abortSignal,endpointMetadata:y,fetchFn:(g=this._options)===null||g===void 0?void 0:g.fetch});if(w.ok)return{data:w.body,rawResponse:w.rawResponse};if(w.error.reason==="status-code")switch(w.error.statusCode){case 400:throw new Hr(w.error.body,w.rawResponse);case 401:throw new Qr(w.error.body,w.rawResponse);case 403:throw new Gr(w.error.body,w.rawResponse);case 429:throw new Yr(w.error.body,w.rawResponse);default:throw new Ze({statusCode:w.error.statusCode,body:w.error.body,rawResponse:w.rawResponse})}switch(w.error.reason){case"non-json":throw new Ze({statusCode:w.error.statusCode,body:w.error.rawBody,rawResponse:w.rawResponse});case"timeout":throw new nr("Timeout exceeded when calling GET /authentication-methods.");case"unknown":throw new Ze({message:w.error.errorMessage,rawResponse:w.rawResponse})}})}create(t,n){return Ur.fromPromise(this.__create(t,n))}__create(t,n){return Bi(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{"Bearer-DPoP":["create:me:authentication_methods"]}]};let w=qr((r=this._options)===null||r===void 0?void 0:r.headers,Zr({Authorization:yield this._getAuthorizationHeader(A)}),n?.headers);const b=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Ir)({url:Vr((u=(s=yield Jt.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Jt.get(this._options.environment))!==null&&u!==void 0?u:Kr.Default,"authentication-methods"),method:"POST",headers:w,contentType:"application/json",queryParameters:n?.queryParams,requestType:"json",body:t,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch});if(b.ok)return{data:b.body,rawResponse:b.rawResponse};if(b.error.reason==="status-code")switch(b.error.statusCode){case 400:throw new Hr(b.error.body,b.rawResponse);case 401:throw new Qr(b.error.body,b.rawResponse);case 403:throw new Gr(b.error.body,b.rawResponse);case 429:throw new Yr(b.error.body,b.rawResponse);default:throw new Ze({statusCode:b.error.statusCode,body:b.error.body,rawResponse:b.rawResponse})}switch(b.error.reason){case"non-json":throw new Ze({statusCode:b.error.statusCode,body:b.error.rawBody,rawResponse:b.rawResponse});case"timeout":throw new nr("Timeout exceeded when calling POST /authentication-methods.");case"unknown":throw new Ze({message:b.error.errorMessage,rawResponse:b.rawResponse})}})}get(t,n){return Ur.fromPromise(this.__get(t,n))}__get(t,n){return Bi(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{"Bearer-DPoP":["read:me:authentication_methods"]}]};let w=qr((r=this._options)===null||r===void 0?void 0:r.headers,Zr({Authorization:yield this._getAuthorizationHeader(A)}),n?.headers);const b=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Ir)({url:Vr((u=(s=yield Jt.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Jt.get(this._options.environment))!==null&&u!==void 0?u:Kr.Default,`authentication-methods/${ml(t)}`),method:"GET",headers:w,queryParameters:n?.queryParams,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch});if(b.ok)return{data:b.body,rawResponse:b.rawResponse};if(b.error.reason==="status-code")switch(b.error.statusCode){case 400:throw new Hr(b.error.body,b.rawResponse);case 401:throw new Qr(b.error.body,b.rawResponse);case 403:throw new Gr(b.error.body,b.rawResponse);case 404:throw new S8(b.error.body,b.rawResponse);case 429:throw new Yr(b.error.body,b.rawResponse);default:throw new Ze({statusCode:b.error.statusCode,body:b.error.body,rawResponse:b.rawResponse})}switch(b.error.reason){case"non-json":throw new Ze({statusCode:b.error.statusCode,body:b.error.rawBody,rawResponse:b.rawResponse});case"timeout":throw new nr("Timeout exceeded when calling GET /authentication-methods/{authentication_method_id}.");case"unknown":throw new Ze({message:b.error.errorMessage,rawResponse:b.rawResponse})}})}delete(t,n){return Ur.fromPromise(this.__delete(t,n))}__delete(t,n){return Bi(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{"Bearer-DPoP":["delete:me:authentication_methods"]}]};let w=qr((r=this._options)===null||r===void 0?void 0:r.headers,Zr({Authorization:yield this._getAuthorizationHeader(A)}),n?.headers);const b=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Ir)({url:Vr((u=(s=yield Jt.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Jt.get(this._options.environment))!==null&&u!==void 0?u:Kr.Default,`authentication-methods/${ml(t)}`),method:"DELETE",headers:w,queryParameters:n?.queryParams,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch});if(b.ok)return{data:void 0,rawResponse:b.rawResponse};if(b.error.reason==="status-code")switch(b.error.statusCode){case 400:throw new Hr(b.error.body,b.rawResponse);case 401:throw new Qr(b.error.body,b.rawResponse);case 403:throw new Gr(b.error.body,b.rawResponse);case 429:throw new Yr(b.error.body,b.rawResponse);default:throw new Ze({statusCode:b.error.statusCode,body:b.error.body,rawResponse:b.rawResponse})}switch(b.error.reason){case"non-json":throw new Ze({statusCode:b.error.statusCode,body:b.error.rawBody,rawResponse:b.rawResponse});case"timeout":throw new nr("Timeout exceeded when calling DELETE /authentication-methods/{authentication_method_id}.");case"unknown":throw new Ze({message:b.error.errorMessage,rawResponse:b.rawResponse})}})}update(t,n={},r){return Ur.fromPromise(this.__update(t,n,r))}__update(t){return Bi(this,arguments,void 0,function*(n,r={},o){var s,u,c,d,p,m,g,y,A,w;const b={security:[{"Bearer-DPoP":["update:me:authentication_methods"]}]};let x=qr((s=this._options)===null||s===void 0?void 0:s.headers,Zr({Authorization:yield this._getAuthorizationHeader(b)}),o?.headers);const E=yield((u=this._options.fetcher)!==null&&u!==void 0?u:Ir)({url:Vr((d=(c=yield Jt.get(this._options.baseUrl))!==null&&c!==void 0?c:yield Jt.get(this._options.environment))!==null&&d!==void 0?d:Kr.Default,`authentication-methods/${ml(n)}`),method:"PATCH",headers:x,contentType:"application/json",queryParameters:o?.queryParams,requestType:"json",body:r,timeoutMs:((g=(p=o?.timeoutInSeconds)!==null&&p!==void 0?p:(m=this._options)===null||m===void 0?void 0:m.timeoutInSeconds)!==null&&g!==void 0?g:60)*1e3,maxRetries:(y=o?.maxRetries)!==null&&y!==void 0?y:(A=this._options)===null||A===void 0?void 0:A.maxRetries,abortSignal:o?.abortSignal,endpointMetadata:b,fetchFn:(w=this._options)===null||w===void 0?void 0:w.fetch});if(E.ok)return{data:E.body,rawResponse:E.rawResponse};if(E.error.reason==="status-code")switch(E.error.statusCode){case 400:throw new Hr(E.error.body,E.rawResponse);case 401:throw new Qr(E.error.body,E.rawResponse);case 403:throw new Gr(E.error.body,E.rawResponse);case 429:throw new Yr(E.error.body,E.rawResponse);default:throw new Ze({statusCode:E.error.statusCode,body:E.error.body,rawResponse:E.rawResponse})}switch(E.error.reason){case"non-json":throw new Ze({statusCode:E.error.statusCode,body:E.error.rawBody,rawResponse:E.rawResponse});case"timeout":throw new nr("Timeout exceeded when calling PATCH /authentication-methods/{authentication_method_id}.");case"unknown":throw new Ze({message:E.error.errorMessage,rawResponse:E.rawResponse})}})}verify(t,n,r){return Ur.fromPromise(this.__verify(t,n,r))}__verify(t,n,r){return Bi(this,void 0,void 0,function*(){var o,s,u,c,d,p,m,g,y,A;const w={security:[{"Bearer-DPoP":["create:me:authentication_methods"]}]};let b=qr((o=this._options)===null||o===void 0?void 0:o.headers,Zr({Authorization:yield this._getAuthorizationHeader(w)}),r?.headers);const x=yield((s=this._options.fetcher)!==null&&s!==void 0?s:Ir)({url:Vr((c=(u=yield Jt.get(this._options.baseUrl))!==null&&u!==void 0?u:yield Jt.get(this._options.environment))!==null&&c!==void 0?c:Kr.Default,`authentication-methods/${ml(t)}/verify`),method:"POST",headers:b,contentType:"application/json",queryParameters:r?.queryParams,requestType:"json",body:n,timeoutMs:((m=(d=r?.timeoutInSeconds)!==null&&d!==void 0?d:(p=this._options)===null||p===void 0?void 0:p.timeoutInSeconds)!==null&&m!==void 0?m:60)*1e3,maxRetries:(g=r?.maxRetries)!==null&&g!==void 0?g:(y=this._options)===null||y===void 0?void 0:y.maxRetries,abortSignal:r?.abortSignal,endpointMetadata:w,fetchFn:(A=this._options)===null||A===void 0?void 0:A.fetch});if(x.ok)return{data:x.body,rawResponse:x.rawResponse};if(x.error.reason==="status-code")switch(x.error.statusCode){case 400:throw new Hr(x.error.body,x.rawResponse);case 401:throw new Qr(x.error.body,x.rawResponse);case 403:throw new Gr(x.error.body,x.rawResponse);case 429:throw new Yr(x.error.body,x.rawResponse);default:throw new Ze({statusCode:x.error.statusCode,body:x.error.body,rawResponse:x.rawResponse})}switch(x.error.reason){case"non-json":throw new Ze({statusCode:x.error.statusCode,body:x.error.rawBody,rawResponse:x.rawResponse});case"timeout":throw new nr("Timeout exceeded when calling POST /authentication-methods/{authentication_method_id}/verify.");case"unknown":throw new Ze({message:x.error.errorMessage,rawResponse:x.rawResponse})}})}_getAuthorizationHeader(t){return Bi(this,void 0,void 0,function*(){return`Bearer ${yield hl.get(this._options.token,{endpointMetadata:t})}`})}}var Ch=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};class R8{constructor(t){this._options=t}list(){return Ch(this,arguments,void 0,function*(t={},n){const r=Ur.interceptFunction(s=>Ch(this,void 0,void 0,function*(){var u,c,d,p,m,g,y,A,w,b,x;const E={security:[{"Bearer-DPoP":["read:me:connected_accounts"]}]},{from:S,take:F=10}=s,R={};S!==void 0&&(R.from=S),F!==void 0&&(R.take=(u=F?.toString())!==null&&u!==void 0?u:null);let k=qr((c=this._options)===null||c===void 0?void 0:c.headers,Zr({Authorization:yield this._getAuthorizationHeader(E)}),n?.headers);const B=yield((d=this._options.fetcher)!==null&&d!==void 0?d:Ir)({url:Vr((m=(p=yield Jt.get(this._options.baseUrl))!==null&&p!==void 0?p:yield Jt.get(this._options.environment))!==null&&m!==void 0?m:Kr.Default,"connected-accounts/connections"),method:"GET",headers:k,queryParameters:Object.assign(Object.assign({},R),n?.queryParams),timeoutMs:((A=(g=n?.timeoutInSeconds)!==null&&g!==void 0?g:(y=this._options)===null||y===void 0?void 0:y.timeoutInSeconds)!==null&&A!==void 0?A:60)*1e3,maxRetries:(w=n?.maxRetries)!==null&&w!==void 0?w:(b=this._options)===null||b===void 0?void 0:b.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:E,fetchFn:(x=this._options)===null||x===void 0?void 0:x.fetch});if(B.ok)return{data:B.body,rawResponse:B.rawResponse};if(B.error.reason==="status-code")switch(B.error.statusCode){case 400:throw new Hr(B.error.body,B.rawResponse);case 401:throw new Qr(B.error.body,B.rawResponse);case 403:throw new Gr(B.error.body,B.rawResponse);case 429:throw new Yr(B.error.body,B.rawResponse);default:throw new Ze({statusCode:B.error.statusCode,body:B.error.body,rawResponse:B.rawResponse})}switch(B.error.reason){case"non-json":throw new Ze({statusCode:B.error.statusCode,body:B.error.rawBody,rawResponse:B.rawResponse});case"timeout":throw new nr("Timeout exceeded when calling GET /connected-accounts/connections.");case"unknown":throw new Ze({message:B.error.errorMessage,rawResponse:B.rawResponse})}})),o=yield r(t).withRawResponse();return new QA({response:o.data,rawResponse:o.rawResponse,hasNextPage:s=>s?.next!=null&&!(typeof s?.next=="string"&&s?.next===""),getItems:s=>{var u;return(u=s?.connections)!==null&&u!==void 0?u:[]},loadPage:s=>r(VA(t,"from",s?.next))})})}_getAuthorizationHeader(t){return Ch(this,void 0,void 0,function*(){return`Bearer ${yield hl.get(this._options.token,{endpointMetadata:t})}`})}}var Ds=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};class B8{constructor(t){this._options=t}get connections(){var t;return(t=this._connections)!==null&&t!==void 0?t:this._connections=new R8(this._options)}create(t,n){return Ur.fromPromise(this.__create(t,n))}__create(t,n){return Ds(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{"Bearer-DPoP":["create:me:connected_accounts"]}]};let w=qr((r=this._options)===null||r===void 0?void 0:r.headers,Zr({Authorization:yield this._getAuthorizationHeader(A)}),n?.headers);const b=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Ir)({url:Vr((u=(s=yield Jt.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Jt.get(this._options.environment))!==null&&u!==void 0?u:Kr.Default,"connected-accounts/connect"),method:"POST",headers:w,contentType:"application/json",queryParameters:n?.queryParams,requestType:"json",body:t,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch});if(b.ok)return{data:b.body,rawResponse:b.rawResponse};if(b.error.reason==="status-code")switch(b.error.statusCode){case 400:throw new Hr(b.error.body,b.rawResponse);case 401:throw new Qr(b.error.body,b.rawResponse);case 403:throw new Gr(b.error.body,b.rawResponse);case 429:throw new Yr(b.error.body,b.rawResponse);default:throw new Ze({statusCode:b.error.statusCode,body:b.error.body,rawResponse:b.rawResponse})}switch(b.error.reason){case"non-json":throw new Ze({statusCode:b.error.statusCode,body:b.error.rawBody,rawResponse:b.rawResponse});case"timeout":throw new nr("Timeout exceeded when calling POST /connected-accounts/connect.");case"unknown":throw new Ze({message:b.error.errorMessage,rawResponse:b.rawResponse})}})}complete(t,n){return Ur.fromPromise(this.__complete(t,n))}__complete(t,n){return Ds(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{"Bearer-DPoP":["create:me:connected_accounts"]}]};let w=qr((r=this._options)===null||r===void 0?void 0:r.headers,Zr({Authorization:yield this._getAuthorizationHeader(A)}),n?.headers);const b=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Ir)({url:Vr((u=(s=yield Jt.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Jt.get(this._options.environment))!==null&&u!==void 0?u:Kr.Default,"connected-accounts/complete"),method:"POST",headers:w,contentType:"application/json",queryParameters:n?.queryParams,requestType:"json",body:t,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch});if(b.ok)return{data:b.body,rawResponse:b.rawResponse};if(b.error.reason==="status-code")switch(b.error.statusCode){case 400:throw new Hr(b.error.body,b.rawResponse);case 401:throw new Qr(b.error.body,b.rawResponse);case 403:throw new Gr(b.error.body,b.rawResponse);case 429:throw new Yr(b.error.body,b.rawResponse);default:throw new Ze({statusCode:b.error.statusCode,body:b.error.body,rawResponse:b.rawResponse})}switch(b.error.reason){case"non-json":throw new Ze({statusCode:b.error.statusCode,body:b.error.rawBody,rawResponse:b.rawResponse});case"timeout":throw new nr("Timeout exceeded when calling POST /connected-accounts/complete.");case"unknown":throw new Ze({message:b.error.errorMessage,rawResponse:b.rawResponse})}})}list(){return Ds(this,arguments,void 0,function*(t={},n){const r=Ur.interceptFunction(s=>Ds(this,void 0,void 0,function*(){var u,c,d,p,m,g,y,A,w,b,x;const E={security:[{"Bearer-DPoP":["read:me:connected_accounts"]}]},{connection:S,from:F,take:R=10}=s,k={};S!==void 0&&(k.connection=typeof S=="string"?S:Xc(S)),F!==void 0&&(k.from=F),R!==void 0&&(k.take=(u=R?.toString())!==null&&u!==void 0?u:null);let B=qr((c=this._options)===null||c===void 0?void 0:c.headers,Zr({Authorization:yield this._getAuthorizationHeader(E)}),n?.headers);const N=yield((d=this._options.fetcher)!==null&&d!==void 0?d:Ir)({url:Vr((m=(p=yield Jt.get(this._options.baseUrl))!==null&&p!==void 0?p:yield Jt.get(this._options.environment))!==null&&m!==void 0?m:Kr.Default,"connected-accounts/accounts"),method:"GET",headers:B,queryParameters:Object.assign(Object.assign({},k),n?.queryParams),timeoutMs:((A=(g=n?.timeoutInSeconds)!==null&&g!==void 0?g:(y=this._options)===null||y===void 0?void 0:y.timeoutInSeconds)!==null&&A!==void 0?A:60)*1e3,maxRetries:(w=n?.maxRetries)!==null&&w!==void 0?w:(b=this._options)===null||b===void 0?void 0:b.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:E,fetchFn:(x=this._options)===null||x===void 0?void 0:x.fetch});if(N.ok)return{data:N.body,rawResponse:N.rawResponse};if(N.error.reason==="status-code")switch(N.error.statusCode){case 400:throw new Hr(N.error.body,N.rawResponse);case 401:throw new Qr(N.error.body,N.rawResponse);case 403:throw new Gr(N.error.body,N.rawResponse);case 429:throw new Yr(N.error.body,N.rawResponse);default:throw new Ze({statusCode:N.error.statusCode,body:N.error.body,rawResponse:N.rawResponse})}switch(N.error.reason){case"non-json":throw new Ze({statusCode:N.error.statusCode,body:N.error.rawBody,rawResponse:N.rawResponse});case"timeout":throw new nr("Timeout exceeded when calling GET /connected-accounts/accounts.");case"unknown":throw new Ze({message:N.error.errorMessage,rawResponse:N.rawResponse})}})),o=yield r(t).withRawResponse();return new QA({response:o.data,rawResponse:o.rawResponse,hasNextPage:s=>s?.next!=null&&!(typeof s?.next=="string"&&s?.next===""),getItems:s=>{var u;return(u=s?.accounts)!==null&&u!==void 0?u:[]},loadPage:s=>r(VA(t,"from",s?.next))})})}delete(t,n){return Ur.fromPromise(this.__delete(t,n))}__delete(t,n){return Ds(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{"Bearer-DPoP":["delete:me:connected_accounts"]}]};let w=qr((r=this._options)===null||r===void 0?void 0:r.headers,Zr({Authorization:yield this._getAuthorizationHeader(A)}),n?.headers);const b=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Ir)({url:Vr((u=(s=yield Jt.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Jt.get(this._options.environment))!==null&&u!==void 0?u:Kr.Default,`connected-accounts/accounts/${ml(t)}`),method:"DELETE",headers:w,queryParameters:n?.queryParams,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch});if(b.ok)return{data:void 0,rawResponse:b.rawResponse};if(b.error.reason==="status-code")switch(b.error.statusCode){case 400:throw new Hr(b.error.body,b.rawResponse);case 401:throw new Qr(b.error.body,b.rawResponse);case 403:throw new Gr(b.error.body,b.rawResponse);case 429:throw new Yr(b.error.body,b.rawResponse);default:throw new Ze({statusCode:b.error.statusCode,body:b.error.body,rawResponse:b.rawResponse})}switch(b.error.reason){case"non-json":throw new Ze({statusCode:b.error.statusCode,body:b.error.rawBody,rawResponse:b.rawResponse});case"timeout":throw new nr("Timeout exceeded when calling DELETE /connected-accounts/accounts/{id}.");case"unknown":throw new Ze({message:b.error.errorMessage,rawResponse:b.rawResponse})}})}_getAuthorizationHeader(t){return Ds(this,void 0,void 0,function*(){return`Bearer ${yield hl.get(this._options.token,{endpointMetadata:t})}`})}}let k8=class{constructor(t){this._options=t}get factors(){var t;return(t=this._factors)!==null&&t!==void 0?t:this._factors=new D8(this._options)}get authenticationMethods(){var t;return(t=this._authenticationMethods)!==null&&t!==void 0?t:this._authenticationMethods=new F8(this._options)}get connectedAccounts(){var t;return(t=this._connectedAccounts)!==null&&t!==void 0?t:this._connectedAccounts=new B8(this._options)}};function M8(e){return _8(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function N8(e){const t=JSON.stringify(e);return M8(t)}const T8="1.0.0-beta.0";function j8(){var e,t;const n=(e=Ss?.type)!==null&&e!==void 0?e:"unknown",r=n==="workerd"?"cloudflare-workers":n,o=(t=Ss?.version)!==null&&t!==void 0?t:"unknown";return{name:"myaccount-js",version:T8,env:{[r]:o}}}let P8=class{constructor(t={}){this.clientInfo=t.clientInfo||j8()}getAuth0ClientHeader(){if(typeof this.clientInfo.name=="string"&&this.clientInfo.name.length>0)return N8(this.clientInfo)}getHeaders(t={}){const n=this.getAuth0ClientHeader();return n?Object.assign(Object.assign({},t),{"Auth0-Client":n}):t}};var z8=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};function L8(e){if(typeof e=="string")return e;if(typeof e=="function")return t=>z8(this,[t],void 0,function*({endpointMetadata:n}){const o=YA(n).join(" ");return yield e({scope:o})});throw new Error("Invalid token supplier provided")}function YA(e){if(!e.security)return[];const t=new Set;for(const n of e.security)for(const r of Object.values(n))for(const o of r)t.add(o);return[...t]}var O8=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};class KA extends k8{constructor(t){var n;const r=t.domain.replace(/^https?:\/\//,"").replace(/\/$/,""),o=`https://${r}/me/v1`,s=`https://${r}/me/`,u=V8(t),c=H8(t),d="fetcher"in t&&t.fetcher?Q8(t.fetcher,s):void 0,p=Object.assign(Object.assign({baseUrl:(n=t.baseUrl)!==null&&n!==void 0?n:o,headers:u},d&&{fetcher:d}),c!==void 0&&{token:c});super(p)}}function I8(e){return"token"in e}function U8(e){return"fetcher"in e}function V8(e){var t;const n=Object.assign({},(t=e.headers)!==null&&t!==void 0?t:{});if(e.telemetry!==!1){const o=new P8({clientInfo:e.clientInfo}).getAuth0ClientHeader();o&&(n["Auth0-Client"]=o)}return n}function H8(e){if(I8(e))return L8(e.token);if(U8(e))return"";throw new Error("MyAccountClient must be configured with either 'token' or 'fetcher' (that handles authorization headers)")}function Q8(e,t){return n=>O8(this,void 0,void 0,function*(){const r=n.endpointMetadata?YA(n.endpointMetadata):[],o=r.length>0?{scope:r,audience:t}:void 0,s={method:n.method,headers:n.headers,body:n.body?JSON.stringify(n.body):void 0,signal:n.abortSignal,credentials:n.withCredentials?"include":void 0},u=yield e(n.url,s,o),c=yield u.text(),d={headers:u.headers,redirected:u.redirected,status:u.status,statusText:u.statusText,type:u.type,url:u.url};return u.ok?{ok:!0,body:c?JSON.parse(c):void 0,rawResponse:d}:{ok:!1,error:{reason:"status-code",statusCode:u.status,body:c?JSON.parse(c):void 0},rawResponse:d}})}function G8(e){const t=String.fromCodePoint(...e);return btoa(t)}function Y8(e){if(typeof Buffer<"u")return Buffer.from(e,"utf8").toString("base64");const t=new TextEncoder().encode(e);return G8(t)}class K8{getAuthRequest(){return Promise.resolve({headers:{}})}}var q8=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};const qA={get:(e,t)=>q8(void 0,void 0,void 0,function*(){return typeof e=="function"?e(t):e})},ed=(e,t,n)=>JSON.stringify(e,t,n);function wh(e,t){return JSON.parse(e,t)}const ka={Debug:"debug",Info:"info",Warn:"warn",Error:"error"},ZA={[ka.Debug]:1,[ka.Info]:2,[ka.Warn]:3,[ka.Error]:4};class WA{debug(t,...n){console.debug(t,...n)}info(t,...n){console.info(t,...n)}warn(t,...n){console.warn(t,...n)}error(t,...n){console.error(t,...n)}}class Eh{constructor(t){this.level=ZA[t.level],this.logger=t.logger,this.silent=t.silent}shouldLog(t){return!this.silent&&this.level<=ZA[t]}isDebug(){return this.shouldLog(ka.Debug)}debug(t,...n){this.isDebug()&&this.logger.debug(t,...n)}isInfo(){return this.shouldLog(ka.Info)}info(t,...n){this.isInfo()&&this.logger.info(t,...n)}isWarn(){return this.shouldLog(ka.Warn)}warn(t,...n){this.isWarn()&&this.logger.warn(t,...n)}isError(){return this.shouldLog(ka.Error)}error(t,...n){this.isError()&&this.logger.error(t,...n)}}function Sh(e){var t,n,r;return e==null?Z8:e instanceof Eh?e:(e=e??{},(t=e.level)!==null&&t!==void 0||(e.level=ka.Info),(n=e.logger)!==null&&n!==void 0||(e.logger=new WA),(r=e.silent)!==null&&r!==void 0||(e.silent=!0),new Eh(e))}const Z8=new Eh({level:ka.Info,logger:new WA,silent:!0}),W8={arrayFormat:"indices",encode:!0};function XA(e,t){if(e===void 0||e===null)return"";const n=String(e);return t?encodeURIComponent(n):n}function Dh(e,t="",n){const r=[];for(const[o,s]of Object.entries(e)){const u=t?`${t}[${o}]`:o;if(s!==void 0)if(Array.isArray(s)){if(s.length===0)continue;for(let c=0;ce.body,arrayBuffer:e.arrayBuffer.bind(e),blob:e.blob.bind(e)};return"bytes"in e&&typeof e.bytes=="function"&&(t.bytes=e.bytes.bind(e)),t}var J8=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};function JA(e,t){return J8(this,void 0,void 0,function*(){switch(t){case"binary-response":return $8(e);case"blob":return yield e.blob();case"arrayBuffer":return yield e.arrayBuffer();case"sse":return e.body==null?{ok:!1,error:{reason:"body-is-null",statusCode:e.status}}:e.body;case"streaming":return e.body==null?{ok:!1,error:{reason:"body-is-null",statusCode:e.status}}:e.body;case"text":return yield e.text()}const n=yield e.text();if(n.length>0)try{return wh(n)}catch{return{ok:!1,error:{reason:"non-json",statusCode:e.status,rawBody:n}}}})}var eF=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};function tF(e){return eF(this,void 0,void 0,function*(){var t,n,r;let o=(t=e.headers.get("Content-Type"))===null||t===void 0?void 0:t.toLowerCase();if(o==null||o.length===0)return JA(e);switch(o.indexOf(";")!==-1&&(o=(r=(n=o.split(";")[0])===null||n===void 0?void 0:n.trim())!==null&&r!==void 0?r:""),o){case"application/hal+json":case"application/json":case"application/ld+json":case"application/problem+json":case"application/vnd.api+json":case"text/json":{const s=yield e.text();return s.length>0?wh(s):void 0}default:if(o.startsWith("application/vnd.")&&o.endsWith("+json")){const s=yield e.text();return s.length>0?wh(s):void 0}return yield e.text()}})}var nF=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};function ey(){return nF(this,void 0,void 0,function*(){return fetch})}var rF=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};function aF(e){return rF(this,arguments,void 0,function*({body:t,type:n}){return n==="form"?$A(t,{arrayFormat:"repeat",encode:!0}):n.includes("json")?ed(t):t})}let Fs;typeof globalThis.Headers<"u"?Fs=globalThis.Headers:Fs=class f9{constructor(t){if(this.headers=new Map,t)if(t instanceof f9)t.forEach((n,r)=>this.append(r,n));else if(Array.isArray(t))for(const[n,r]of t)if(typeof n=="string"&&typeof r=="string")this.append(n,r);else throw new TypeError("Each header entry must be a [string, string] tuple");else for(const[n,r]of Object.entries(t))if(typeof r=="string")this.append(n,r);else throw new TypeError("Header values must be strings")}append(t,n){const r=t.toLowerCase(),o=this.headers.get(r)||[];this.headers.set(r,[...o,n])}delete(t){const n=t.toLowerCase();this.headers.delete(n)}get(t){const n=t.toLowerCase(),r=this.headers.get(n);return r?r.join(", "):null}has(t){const n=t.toLowerCase();return this.headers.has(n)}set(t,n){const r=t.toLowerCase();this.headers.set(r,[n])}forEach(t,n){const r=n?t.bind(n):t;this.headers.forEach((o,s)=>r(o.join(", "),s,this))}getSetCookie(){return this.headers.get("set-cookie")||[]}*entries(){for(const[t,n]of this.headers.entries())yield[t,n.join(", ")]}*keys(){yield*this.headers.keys()}*values(){for(const t of this.headers.values())yield t.join(", ")}[Symbol.iterator](){return this.entries()}};const oF="timeout";function iF(e){const t=new AbortController,n=setTimeout(()=>t.abort(oF),e);return{signal:t.signal,abortId:n}}function sF(...e){const t=e.length===1&&Array.isArray(e[0])?e[0]:e,n=new AbortController;for(const r of t){if(r.aborted){n.abort(r?.reason);break}r.addEventListener("abort",()=>n.abort(r?.reason),{signal:n.signal})}return n.signal}var uF=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};let pl;function lF(){if(pl!=null)return pl;try{new Request("http://localhost",{cache:"no-store"}),pl=!0}catch{pl=!1}return pl}const ty=(e,t,n,r,o,s,u,c,d,p)=>uF(void 0,void 0,void 0,function*(){const m=[];let g;if(s!=null){const{signal:w,abortId:b}=iF(s);g=b,m.push(w)}u!=null&&m.push(u);const y=sF(m),A=yield e(t,Object.assign({method:n,headers:r,body:o,signal:y,credentials:c?"include":void 0,duplex:d},p&&lF()?{cache:"no-store"}:{}));return g!=null&&clearTimeout(g),A}),ny={headers:new Fs,redirected:!1,status:499,statusText:"Client Closed Request",type:"error",url:""},ry={headers:new Fs,redirected:!1,status:0,statusText:"Unknown Error",type:"error",url:""};function ay(e){return{headers:e.headers,redirected:e.redirected,status:e.status,statusText:e.statusText,type:e.type,url:e.url}}var cF=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};const dF=1e3,td=6e4,fF=2,oy=.2;function hF(e){const t=1+Math.random()*oy;return e*t}function mF(e){const t=1+(Math.random()-.5)*oy;return e*t}function pF(e,t){const n=e.headers.get("Retry-After");if(n){const o=parseInt(n,10);if(!Number.isNaN(o)&&o>0)return Math.min(o*1e3,td);const s=new Date(n);if(!Number.isNaN(s.getTime())){const u=s.getTime()-Date.now();if(u>0)return Math.min(Math.max(u,0),td)}}const r=e.headers.get("X-RateLimit-Reset");if(r){const o=parseInt(r,10);if(!Number.isNaN(o)){const s=o*1e3-Date.now();if(s>0)return hF(Math.min(s,td))}}return mF(Math.min(dF*Math.pow(2,t),td))}function iy(e){return cF(this,arguments,void 0,function*(t,n=fF){let r=yield t();for(let o=0;o=500);++o){const s=pF(r,o);yield new Promise(u=>setTimeout(u,s)),r=yield t()}return r})}var Fh=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};const gF=new Set(["authorization","www-authenticate","x-api-key","api-key","apikey","x-api-token","x-auth-token","auth-token","cookie","set-cookie","proxy-authorization","proxy-authenticate","x-csrf-token","x-xsrf-token","x-session-token","x-access-token"]);function Rh(e){const t={};for(const[n,r]of e instanceof Fs?e.entries():Object.entries(e))gF.has(n.toLowerCase())?t[n]="[REDACTED]":t[n]=r;return t}const Bh=new Set(["api_key","api-key","apikey","token","access_token","access-token","auth_token","auth-token","password","passwd","secret","api_secret","api-secret","apisecret","key","session","session_id","session-id"]);function vF(e){if(e==null)return e;const t={};for(const[n,r]of Object.entries(e))Bh.has(n.toLowerCase())?t[n]="[REDACTED]":t[n]=r;return t}function ki(e){const t=e.indexOf("://");if(t===-1)return e;const n=t+3,r=e.indexOf("/",n);let o=e.indexOf("?",n),s=e.indexOf("#",n);const u=Math.min(r===-1?e.length:r,o===-1?e.length:o,s===-1?e.length:s);let c=-1;for(let w=n;wFh(this,void 0,void 0,function*(){return ty(u,o,e.method,c,s,e.timeoutMs,e.abortSignal,e.withCredentials,e.duplex,e.responseType==="streaming"||e.responseType==="sse")}),e.maxRetries);if(p.status>=200&&p.status<400){if(d.isDebug()){const g={method:e.method,url:ki(o),statusCode:p.status,responseHeaders:Rh(p.headers)};d.debug("HTTP request succeeded",g)}return{ok:!0,body:yield JA(p,e.responseType),headers:p.headers,rawResponse:ay(p)}}else{if(d.isError()){const m={method:e.method,url:ki(o),statusCode:p.status,responseHeaders:Rh(Object.fromEntries(p.headers.entries()))};d.error("HTTP request failed with error status",m)}return{ok:!1,error:{reason:"status-code",statusCode:p.status,body:yield tF(p)},rawResponse:ay(p)}}}catch(p){if(!((r=e.abortSignal)===null||r===void 0)&&r.aborted){if(d.isError()){const m={method:e.method,url:ki(o)};d.error("HTTP request was aborted",m)}return{ok:!1,error:{reason:"unknown",errorMessage:"The user aborted a request",cause:p},rawResponse:ny}}else if(p instanceof Error&&p.name==="AbortError"){if(d.isError()){const m={method:e.method,url:ki(o),timeoutMs:e.timeoutMs};d.error("HTTP request timed out",m)}return{ok:!1,error:{reason:"timeout",cause:p},rawResponse:ny}}else if(p instanceof Error){if(d.isError()){const m={method:e.method,url:ki(o),errorMessage:p.message};d.error("HTTP request failed with error",m)}return{ok:!1,error:{reason:"unknown",errorMessage:p.message,cause:p},rawResponse:ry}}if(d.isError()){const m={method:e.method,url:ki(o),error:ed(p)};d.error("HTTP request failed with unknown error",m)}return{ok:!1,error:{reason:"unknown",errorMessage:ed(p),cause:p},rawResponse:ry}}})}const Nt=yF;var bF=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};class yt extends Promise{constructor(t){super(n=>{n(void 0)}),this.innerPromise=t}static fromFunction(t,...n){return new yt(t(...n))}static interceptFunction(t){return(...n)=>yt.fromPromise(t(...n))}static fromPromise(t){return new yt(t)}static fromExecutor(t){const n=new Promise(t);return new yt(n)}static fromResult(t){const n=Promise.resolve(t);return new yt(n)}unwrap(){return this.unwrappedPromise||(this.unwrappedPromise=this.innerPromise.then(({data:t})=>t)),this.unwrappedPromise}then(t,n){return this.unwrap().then(t,n)}catch(t){return this.unwrap().catch(t)}finally(t){return this.unwrap().finally(t)}withRawResponse(){return bF(this,void 0,void 0,function*(){return yield this.innerPromise})}}function Tt(e,...t){if(!e)return"";if(t.length===0)return e;if(e.includes("://")){let n;try{n=new URL(e)}catch{return sy(e,...t)}const r=t[t.length-1],o=r?.endsWith("/");for(const s of t){const u=ly(s);u&&(n.pathname=uy(n.pathname,u))}return o&&!n.pathname.endsWith("/")&&(n.pathname+="/"),n.toString()}return sy(e,...t)}function sy(e,...t){if(t.length===0)return e;let n=e;const r=t[t.length-1],o=r?.endsWith("/");for(const s of t){const u=ly(s);u&&(n=uy(n,u))}return o&&!n.endsWith("/")&&(n+="/"),n}function uy(e,t){return e.endsWith("/")?e+t:`${e}/${t}`}function ly(e){if(!e)return e;let t=0,n=e.length;return e.startsWith("/")&&(t=1),e.endsWith("/")&&(n=e.length-1),t===0&&n===e.length?e:e.slice(t,n)}var xF=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};const Ne={get:e=>xF(void 0,void 0,void 0,function*(){return typeof e=="function"?e():e})};var cy=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};function _F(e,t,n,r){return cy(this,void 0,void 0,function*(){var o,s,u,c,d,p,m;const g=Sh(n.logging);let y,A=t;e instanceof Request?(y=e.url,t==null&&(A={method:e.method,headers:Object.fromEntries(e.headers.entries()),body:e.body,signal:e.signal,credentials:e.credentials,cache:e.cache,redirect:e.redirect,referrer:e.referrer,integrity:e.integrity,mode:e.mode})):y=e instanceof URL?e.toString():e;const w=(o=n.baseUrl!=null?yield Ne.get(n.baseUrl):void 0)!==null&&o!==void 0?o:n.environment!=null?yield Ne.get(n.environment):void 0;let b;y.startsWith("http://")||y.startsWith("https://")?b=y:w!=null?b=Tt(w,y):b=y;const x={};if(n.headers!=null)for(const[U,Q]of Object.entries(n.headers)){const $=yield qA.get(Q,{endpointMetadata:{}});$!=null&&(x[U.toLowerCase()]=`${$}`)}if(n.getAuthHeaders!=null){const U=yield n.getAuthHeaders();for(const[Q,$]of Object.entries(U))x[Q.toLowerCase()]=$}if(A?.headers!=null){const U=A.headers instanceof Headers?Object.fromEntries(A.headers.entries()):Array.isArray(A.headers)?Object.fromEntries(A.headers):A.headers;for(const[Q,$]of Object.entries(U))$!=null&&(x[Q.toLowerCase()]=$)}if(r?.headers!=null)for(const[U,Q]of Object.entries(r.headers))x[U.toLowerCase()]=Q;const E=(s=A?.method)!==null&&s!==void 0?s:"GET",S=A?.body,F=(u=r?.timeoutInSeconds)!==null&&u!==void 0?u:n.timeoutInSeconds,R=F!=null?F*1e3:void 0,k=(c=r?.maxRetries)!==null&&c!==void 0?c:n.maxRetries,B=(p=(d=r?.abortSignal)!==null&&d!==void 0?d:A?.signal)!==null&&p!==void 0?p:void 0,N=(m=n.fetch)!==null&&m!==void 0?m:yield ey();g.isDebug()&&g.debug("Making passthrough HTTP request",{method:E,url:b,hasBody:S!=null});const P=yield iy(()=>cy(this,void 0,void 0,function*(){return ty(N,b,E,x,S??void 0,R,B,A?.credentials==="include",void 0,!1)}),k);return g.isDebug()&&g.debug("Passthrough HTTP request completed",{method:E,url:b,statusCode:P.status}),P})}var CF=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})},no=function(e){return this instanceof no?(this.v=e,this):new no(e)},dy=function(e,t,n){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var r=n.apply(e,t||[]),o,s=[];return o=Object.create((typeof AsyncIterator=="function"?AsyncIterator:Object).prototype),c("next"),c("throw"),c("return",u),o[Symbol.asyncIterator]=function(){return this},o;function u(A){return function(w){return Promise.resolve(w).then(A,g)}}function c(A,w){r[A]&&(o[A]=function(b){return new Promise(function(x,E){s.push([A,b,x,E])>1||d(A,b)})},w&&(o[A]=w(o[A])))}function d(A,w){try{p(r[A](w))}catch(b){y(s[0][3],b)}}function p(A){A.value instanceof no?Promise.resolve(A.value.v).then(m,g):y(s[0][2],A)}function m(A){d("next",A)}function g(A){d("throw",A)}function y(A,w){A(w),s.shift(),s.length&&d(s[0][0],s[0][1])}},wF=function(e){if(!Symbol.asyncIterator)throw new TypeError("Symbol.asyncIterator is not defined.");var t=e[Symbol.asyncIterator],n;return t?t.call(e):(e=typeof __values=="function"?__values(e):e[Symbol.iterator](),n={},r("next"),r("throw"),r("return"),n[Symbol.asyncIterator]=function(){return this},n);function r(s){n[s]=e[s]&&function(u){return new Promise(function(c,d){u=e[s](u),o(c,d,u.done,u.value)})}}function o(s,u,c,d){Promise.resolve(d).then(function(p){s({value:p,done:c})},u)}};class EF{constructor({response:t,rawResponse:n,hasNextPage:r,getItems:o,loadPage:s}){this.response=t,this.rawResponse=n,this.data=o(t),this._hasNextPage=r,this.getItems=o,this.loadNextPage=s}getNextPage(){return CF(this,void 0,void 0,function*(){const{data:t,rawResponse:n}=yield this.loadNextPage(this.response).withRawResponse();return this.response=t,this.rawResponse=n,this.data=this.getItems(this.response),this})}hasNextPage(){return this._hasNextPage(this.response)}iterMessages(){return dy(this,arguments,function*(){for(const n of this.data)yield yield no(n);for(;this.hasNextPage();){yield no(this.getNextPage());for(const n of this.data)yield yield no(n)}})}[Symbol.asyncIterator](){return dy(this,arguments,function*(){var n,r,o,s;try{for(var u=!0,c=wF(this.iterMessages()),d;d=yield no(c.next()),n=d.done,!n;u=!0)s=d.value,u=!1,yield yield no(s)}catch(p){r={error:p}}finally{try{!u&&!n&&(o=c.return)&&(yield no(o.call(c)))}finally{if(r)throw r.error}}})}}const Rs=SF();function SF(){var e,t,n,r,o;if(typeof window<"u"&&typeof window.document<"u")return{type:"browser",version:window.navigator.userAgent};if(typeof globalThis<"u"&&((e=globalThis?.navigator)===null||e===void 0?void 0:e.userAgent)==="Cloudflare-Workers")return{type:"workerd"};if(typeof EdgeRuntime=="string")return{type:"edge-runtime"};if(typeof self=="object"&&typeof self?.importScripts=="function"&&(((t=self.constructor)===null||t===void 0?void 0:t.name)==="DedicatedWorkerGlobalScope"||((n=self.constructor)===null||n===void 0?void 0:n.name)==="ServiceWorkerGlobalScope"||((r=self.constructor)===null||r===void 0?void 0:r.name)==="SharedWorkerGlobalScope"))return{type:"web-worker"};if(typeof Deno<"u"&&typeof Deno.version<"u"&&typeof Deno.version.deno<"u")return{type:"deno",version:Deno.version.deno};if(typeof Bun<"u"&&typeof Bun.version<"u")return{type:"bun",version:Bun.version};if(typeof navigator<"u"&&navigator?.product==="ReactNative")return{type:"react-native"};const y=typeof process<"u"?process:void 0;return typeof y<"u"&&typeof((o=y.versions)===null||o===void 0?void 0:o.node)=="string"?{type:"node",version:y.versions.node,parsedVersion:Number(y.versions.node.split(".")[0])}:{type:"unknown"}}function mn(e){if(e===null)return"null";switch(typeof e){case"undefined":return"undefined";case"string":case"number":case"boolean":break;default:e=String(e);break}return encodeURIComponent(e)}function DF(e,t,n){if(e==null)return e;const r=t.split(".");if(r.length===0)return e;let o=e;for(let u=0;uo!=null).flatMap(o=>Object.entries(o))){const o=n.toLowerCase();r!=null?t[o]=r:o in t&&delete t[o]}return t}function Qt(e,t,n,r){switch(e.reason){case"non-json":throw new ut({statusCode:e.statusCode,body:e.rawBody,rawResponse:t});case"body-is-null":throw new ut({statusCode:e.statusCode,rawResponse:t});case"timeout":throw new RF(`Timeout exceeded when calling ${n} ${r}.`,{cause:e.cause});case"unknown":throw new ut({message:e.errorMessage,rawResponse:t,cause:e.cause});default:throw new ut({message:"Unknown error",rawResponse:t})}}var TF=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};let jF=class{constructor(t){this._options=Wr(t)}get(t){return yt.fromPromise(this.__get(t))}__get(t){return TF(this,void 0,void 0,function*(){var n,r,o,s,u,c,d,p,m,g;const y={security:[{OAuth2ClientCredentials:["read:my_org:configuration"]},{OAuth2AuthCode:["read:my_org:configuration"]}]},A=yield this._options.authProvider.getAuthRequest({endpointMetadata:y});let w=Ht(A.headers,(n=this._options)===null||n===void 0?void 0:n.headers,t?.headers);const b=yield((r=this._options.fetcher)!==null&&r!==void 0?r:Nt)({url:Tt((s=(o=yield Ne.get(this._options.baseUrl))!==null&&o!==void 0?o:yield Ne.get(this._options.environment))!==null&&s!==void 0?s:Vt.Default,"config/identity-providers"),method:"GET",headers:w,queryParameters:t?.queryParams,timeoutMs:((d=(u=t?.timeoutInSeconds)!==null&&u!==void 0?u:(c=this._options)===null||c===void 0?void 0:c.timeoutInSeconds)!==null&&d!==void 0?d:60)*1e3,maxRetries:(p=t?.maxRetries)!==null&&p!==void 0?p:(m=this._options)===null||m===void 0?void 0:m.maxRetries,abortSignal:t?.abortSignal,endpointMetadata:y,fetchFn:(g=this._options)===null||g===void 0?void 0:g.fetch,logging:this._options.logging});if(b.ok)return{data:b.body,rawResponse:b.rawResponse};if(b.error.reason==="status-code")switch(b.error.statusCode){case 401:throw new Ut(b.error.body,b.rawResponse);case 403:throw new Lt(b.error.body,b.rawResponse);case 404:throw new Ot(b.error.body,b.rawResponse);case 429:throw new It(b.error.body,b.rawResponse);default:throw new ut({statusCode:b.error.statusCode,body:b.error.body,rawResponse:b.rawResponse})}return Qt(b.error,b.rawResponse,"GET","/config/identity-providers")})}};var PF=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};class zF{constructor(t){this._options=Wr(t)}get identityProviders(){var t;return(t=this._identityProviders)!==null&&t!==void 0?t:this._identityProviders=new jF(this._options)}get(t){return yt.fromPromise(this.__get(t))}__get(t){return PF(this,void 0,void 0,function*(){var n,r,o,s,u,c,d,p,m,g;const y={security:[{OAuth2ClientCredentials:["read:my_org:configuration"]},{OAuth2AuthCode:["read:my_org:configuration"]}]},A=yield this._options.authProvider.getAuthRequest({endpointMetadata:y});let w=Ht(A.headers,(n=this._options)===null||n===void 0?void 0:n.headers,t?.headers);const b=yield((r=this._options.fetcher)!==null&&r!==void 0?r:Nt)({url:Tt((s=(o=yield Ne.get(this._options.baseUrl))!==null&&o!==void 0?o:yield Ne.get(this._options.environment))!==null&&s!==void 0?s:Vt.Default,"config"),method:"GET",headers:w,queryParameters:t?.queryParams,timeoutMs:((d=(u=t?.timeoutInSeconds)!==null&&u!==void 0?u:(c=this._options)===null||c===void 0?void 0:c.timeoutInSeconds)!==null&&d!==void 0?d:60)*1e3,maxRetries:(p=t?.maxRetries)!==null&&p!==void 0?p:(m=this._options)===null||m===void 0?void 0:m.maxRetries,abortSignal:t?.abortSignal,endpointMetadata:y,fetchFn:(g=this._options)===null||g===void 0?void 0:g.fetch,logging:this._options.logging});if(b.ok)return{data:b.body,rawResponse:b.rawResponse};if(b.error.reason==="status-code")switch(b.error.statusCode){case 401:throw new Ut(b.error.body,b.rawResponse);case 403:throw new Lt(b.error.body,b.rawResponse);case 404:throw new Ot(b.error.body,b.rawResponse);case 429:throw new It(b.error.body,b.rawResponse);default:throw new ut({statusCode:b.error.statusCode,body:b.error.body,rawResponse:b.rawResponse})}return Qt(b.error,b.rawResponse,"GET","/config")})}}var LF=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};let OF=class{constructor(t){this._options=Wr(t)}get(t,n){return yt.fromPromise(this.__get(t,n))}__get(t,n){return LF(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{OAuth2ClientCredentials:["read:my_org:domains","read:my_org:identity_providers"]},{OAuth2AuthCode:["read:my_org:domains","read:my_org:identity_providers"]}]},w=yield this._options.authProvider.getAuthRequest({endpointMetadata:A});let b=Ht(w.headers,(r=this._options)===null||r===void 0?void 0:r.headers,n?.headers);const x=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Nt)({url:Tt((u=(s=yield Ne.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Ne.get(this._options.environment))!==null&&u!==void 0?u:Vt.Default,`domains/${mn(t)}/identity-providers`),method:"GET",headers:b,queryParameters:n?.queryParams,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch,logging:this._options.logging});if(x.ok)return{data:x.body,rawResponse:x.rawResponse};if(x.error.reason==="status-code")switch(x.error.statusCode){case 400:throw new on(x.error.body,x.rawResponse);case 401:throw new Ut(x.error.body,x.rawResponse);case 403:throw new Lt(x.error.body,x.rawResponse);case 404:throw new Ot(x.error.body,x.rawResponse);case 429:throw new It(x.error.body,x.rawResponse);default:throw new ut({statusCode:x.error.statusCode,body:x.error.body,rawResponse:x.rawResponse})}return Qt(x.error,x.rawResponse,"GET","/domains/{domain_id}/identity-providers")})}};var IF=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};class UF{constructor(t){this._options=Wr(t)}create(t,n){return yt.fromPromise(this.__create(t,n))}__create(t,n){return IF(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{OAuth2ClientCredentials:["update:my_org:domains"]},{OAuth2AuthCode:["update:my_org:domains"]}]},w=yield this._options.authProvider.getAuthRequest({endpointMetadata:A});let b=Ht(w.headers,(r=this._options)===null||r===void 0?void 0:r.headers,n?.headers);const x=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Nt)({url:Tt((u=(s=yield Ne.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Ne.get(this._options.environment))!==null&&u!==void 0?u:Vt.Default,`domains/${mn(t)}/verify`),method:"POST",headers:b,queryParameters:n?.queryParams,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch,logging:this._options.logging});if(x.ok)return{data:x.body,rawResponse:x.rawResponse};if(x.error.reason==="status-code")switch(x.error.statusCode){case 400:throw new on(x.error.body,x.rawResponse);case 401:throw new Ut(x.error.body,x.rawResponse);case 403:throw new Lt(x.error.body,x.rawResponse);case 404:throw new Ot(x.error.body,x.rawResponse);case 429:throw new It(x.error.body,x.rawResponse);default:throw new ut({statusCode:x.error.statusCode,body:x.error.body,rawResponse:x.rawResponse})}return Qt(x.error,x.rawResponse,"POST","/domains/{domain_id}/verify")})}}var gl=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};let VF=class{constructor(t){this._options=Wr(t)}get verify(){var t;return(t=this._verify)!==null&&t!==void 0?t:this._verify=new UF(this._options)}get identityProviders(){var t;return(t=this._identityProviders)!==null&&t!==void 0?t:this._identityProviders=new OF(this._options)}list(){return gl(this,arguments,void 0,function*(t={},n){const r=yt.interceptFunction(s=>gl(this,void 0,void 0,function*(){var u,c,d,p,m,g,y,A,w,b;const x={security:[{OAuth2ClientCredentials:["read:my_org:domains"]},{OAuth2AuthCode:["read:my_org:domains"]}]},{from:E,take:S=50}=s,F={from:E,take:S},R=yield this._options.authProvider.getAuthRequest({endpointMetadata:x});let k=Ht(R.headers,(u=this._options)===null||u===void 0?void 0:u.headers,n?.headers);const B=yield((c=this._options.fetcher)!==null&&c!==void 0?c:Nt)({url:Tt((p=(d=yield Ne.get(this._options.baseUrl))!==null&&d!==void 0?d:yield Ne.get(this._options.environment))!==null&&p!==void 0?p:Vt.Default,"domains"),method:"GET",headers:k,queryParameters:Object.assign(Object.assign({},F),n?.queryParams),timeoutMs:((y=(m=n?.timeoutInSeconds)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.timeoutInSeconds)!==null&&y!==void 0?y:60)*1e3,maxRetries:(A=n?.maxRetries)!==null&&A!==void 0?A:(w=this._options)===null||w===void 0?void 0:w.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:x,fetchFn:(b=this._options)===null||b===void 0?void 0:b.fetch,logging:this._options.logging});if(B.ok)return{data:B.body,rawResponse:B.rawResponse};if(B.error.reason==="status-code")switch(B.error.statusCode){case 400:throw new on(B.error.body,B.rawResponse);case 401:throw new Ut(B.error.body,B.rawResponse);case 403:throw new Lt(B.error.body,B.rawResponse);case 404:throw new Ot(B.error.body,B.rawResponse);case 429:throw new It(B.error.body,B.rawResponse);default:throw new ut({statusCode:B.error.statusCode,body:B.error.body,rawResponse:B.rawResponse})}return Qt(B.error,B.rawResponse,"GET","/domains")})),o=yield r(t).withRawResponse();return new EF({response:o.data,rawResponse:o.rawResponse,hasNextPage:s=>s?.next!=null&&!(typeof s?.next=="string"&&s?.next===""),getItems:s=>{var u;return(u=s?.organization_domains)!==null&&u!==void 0?u:[]},loadPage:s=>r(DF(t,"from",s?.next))})})}create(t,n){return yt.fromPromise(this.__create(t,n))}__create(t,n){return gl(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{OAuth2ClientCredentials:["create:my_org:domains"]},{OAuth2AuthCode:["create:my_org:domains"]}]},w=yield this._options.authProvider.getAuthRequest({endpointMetadata:A});let b=Ht(w.headers,(r=this._options)===null||r===void 0?void 0:r.headers,n?.headers);const x=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Nt)({url:Tt((u=(s=yield Ne.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Ne.get(this._options.environment))!==null&&u!==void 0?u:Vt.Default,"domains"),method:"POST",headers:b,contentType:"application/json",queryParameters:n?.queryParams,requestType:"json",body:t,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch,logging:this._options.logging});if(x.ok)return{data:x.body,rawResponse:x.rawResponse};if(x.error.reason==="status-code")switch(x.error.statusCode){case 400:throw new on(x.error.body,x.rawResponse);case 401:throw new Ut(x.error.body,x.rawResponse);case 403:throw new Lt(x.error.body,x.rawResponse);case 404:throw new Ot(x.error.body,x.rawResponse);case 409:throw new kh(x.error.body,x.rawResponse);case 429:throw new It(x.error.body,x.rawResponse);default:throw new ut({statusCode:x.error.statusCode,body:x.error.body,rawResponse:x.rawResponse})}return Qt(x.error,x.rawResponse,"POST","/domains")})}get(t,n){return yt.fromPromise(this.__get(t,n))}__get(t,n){return gl(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{OAuth2ClientCredentials:["read:my_org:domains"]},{OAuth2AuthCode:["read:my_org:domains"]}]},w=yield this._options.authProvider.getAuthRequest({endpointMetadata:A});let b=Ht(w.headers,(r=this._options)===null||r===void 0?void 0:r.headers,n?.headers);const x=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Nt)({url:Tt((u=(s=yield Ne.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Ne.get(this._options.environment))!==null&&u!==void 0?u:Vt.Default,`domains/${mn(t)}`),method:"GET",headers:b,queryParameters:n?.queryParams,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch,logging:this._options.logging});if(x.ok)return{data:x.body,rawResponse:x.rawResponse};if(x.error.reason==="status-code")switch(x.error.statusCode){case 400:throw new on(x.error.body,x.rawResponse);case 401:throw new Ut(x.error.body,x.rawResponse);case 403:throw new Lt(x.error.body,x.rawResponse);case 404:throw new Ot(x.error.body,x.rawResponse);case 429:throw new It(x.error.body,x.rawResponse);default:throw new ut({statusCode:x.error.statusCode,body:x.error.body,rawResponse:x.rawResponse})}return Qt(x.error,x.rawResponse,"GET","/domains/{domain_id}")})}delete(t,n){return yt.fromPromise(this.__delete(t,n))}__delete(t,n){return gl(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{OAuth2ClientCredentials:["delete:my_org:domains"]},{OAuth2AuthCode:["delete:my_org:domains"]}]},w=yield this._options.authProvider.getAuthRequest({endpointMetadata:A});let b=Ht(w.headers,(r=this._options)===null||r===void 0?void 0:r.headers,n?.headers);const x=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Nt)({url:Tt((u=(s=yield Ne.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Ne.get(this._options.environment))!==null&&u!==void 0?u:Vt.Default,`domains/${mn(t)}`),method:"DELETE",headers:b,queryParameters:n?.queryParams,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch,logging:this._options.logging});if(x.ok)return{data:void 0,rawResponse:x.rawResponse};if(x.error.reason==="status-code")switch(x.error.statusCode){case 400:throw new on(x.error.body,x.rawResponse);case 401:throw new Ut(x.error.body,x.rawResponse);case 403:throw new Lt(x.error.body,x.rawResponse);case 404:throw new Ot(x.error.body,x.rawResponse);case 429:throw new It(x.error.body,x.rawResponse);default:throw new ut({statusCode:x.error.statusCode,body:x.error.body,rawResponse:x.rawResponse})}return Qt(x.error,x.rawResponse,"DELETE","/domains/{domain_id}")})}};var fy=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};class HF{constructor(t){this._options=Wr(t)}create(t,n,r){return yt.fromPromise(this.__create(t,n,r))}__create(t,n,r){return fy(this,void 0,void 0,function*(){var o,s,u,c,d,p,m,g,y,A;const w={security:[{OAuth2ClientCredentials:["create:my_org:identity_providers_domains"]},{OAuth2AuthCode:["create:my_org:identity_providers_domains"]}]},b=yield this._options.authProvider.getAuthRequest({endpointMetadata:w});let x=Ht(b.headers,(o=this._options)===null||o===void 0?void 0:o.headers,r?.headers);const E=yield((s=this._options.fetcher)!==null&&s!==void 0?s:Nt)({url:Tt((c=(u=yield Ne.get(this._options.baseUrl))!==null&&u!==void 0?u:yield Ne.get(this._options.environment))!==null&&c!==void 0?c:Vt.Default,`identity-providers/${mn(t)}/domains`),method:"POST",headers:x,contentType:"application/json",queryParameters:r?.queryParams,requestType:"json",body:n,timeoutMs:((m=(d=r?.timeoutInSeconds)!==null&&d!==void 0?d:(p=this._options)===null||p===void 0?void 0:p.timeoutInSeconds)!==null&&m!==void 0?m:60)*1e3,maxRetries:(g=r?.maxRetries)!==null&&g!==void 0?g:(y=this._options)===null||y===void 0?void 0:y.maxRetries,abortSignal:r?.abortSignal,endpointMetadata:w,fetchFn:(A=this._options)===null||A===void 0?void 0:A.fetch,logging:this._options.logging});if(E.ok)return{data:E.body,rawResponse:E.rawResponse};if(E.error.reason==="status-code")switch(E.error.statusCode){case 400:throw new on(E.error.body,E.rawResponse);case 401:throw new Ut(E.error.body,E.rawResponse);case 403:throw new Lt(E.error.body,E.rawResponse);case 404:throw new Ot(E.error.body,E.rawResponse);case 409:throw new kh(E.error.body,E.rawResponse);case 429:throw new It(E.error.body,E.rawResponse);default:throw new ut({statusCode:E.error.statusCode,body:E.error.body,rawResponse:E.rawResponse})}return Qt(E.error,E.rawResponse,"POST","/identity-providers/{idp_id}/domains")})}delete(t,n,r){return yt.fromPromise(this.__delete(t,n,r))}__delete(t,n,r){return fy(this,void 0,void 0,function*(){var o,s,u,c,d,p,m,g,y,A;const w={security:[{OAuth2ClientCredentials:["delete:my_org:identity_providers_domains"]},{OAuth2AuthCode:["delete:my_org:identity_providers_domains"]}]},b=yield this._options.authProvider.getAuthRequest({endpointMetadata:w});let x=Ht(b.headers,(o=this._options)===null||o===void 0?void 0:o.headers,r?.headers);const E=yield((s=this._options.fetcher)!==null&&s!==void 0?s:Nt)({url:Tt((c=(u=yield Ne.get(this._options.baseUrl))!==null&&u!==void 0?u:yield Ne.get(this._options.environment))!==null&&c!==void 0?c:Vt.Default,`identity-providers/${mn(t)}/domains/${mn(n)}`),method:"DELETE",headers:x,queryParameters:r?.queryParams,timeoutMs:((m=(d=r?.timeoutInSeconds)!==null&&d!==void 0?d:(p=this._options)===null||p===void 0?void 0:p.timeoutInSeconds)!==null&&m!==void 0?m:60)*1e3,maxRetries:(g=r?.maxRetries)!==null&&g!==void 0?g:(y=this._options)===null||y===void 0?void 0:y.maxRetries,abortSignal:r?.abortSignal,endpointMetadata:w,fetchFn:(A=this._options)===null||A===void 0?void 0:A.fetch,logging:this._options.logging});if(E.ok)return{data:void 0,rawResponse:E.rawResponse};if(E.error.reason==="status-code")switch(E.error.statusCode){case 400:throw new on(E.error.body,E.rawResponse);case 401:throw new Ut(E.error.body,E.rawResponse);case 403:throw new Lt(E.error.body,E.rawResponse);case 404:throw new Ot(E.error.body,E.rawResponse);case 429:throw new It(E.error.body,E.rawResponse);default:throw new ut({statusCode:E.error.statusCode,body:E.error.body,rawResponse:E.rawResponse})}return Qt(E.error,E.rawResponse,"DELETE","/identity-providers/{idp_id}/domains/{domain}")})}}var Mh=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};class QF{constructor(t){this._options=Wr(t)}list(t,n){return yt.fromPromise(this.__list(t,n))}__list(t,n){return Mh(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{OAuth2ClientCredentials:["read:my_org:identity_providers_scim_tokens"]},{OAuth2AuthCode:["read:my_org:identity_providers_scim_tokens"]}]},w=yield this._options.authProvider.getAuthRequest({endpointMetadata:A});let b=Ht(w.headers,(r=this._options)===null||r===void 0?void 0:r.headers,n?.headers);const x=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Nt)({url:Tt((u=(s=yield Ne.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Ne.get(this._options.environment))!==null&&u!==void 0?u:Vt.Default,`identity-providers/${mn(t)}/provisioning/scim-tokens`),method:"GET",headers:b,queryParameters:n?.queryParams,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch,logging:this._options.logging});if(x.ok)return{data:x.body,rawResponse:x.rawResponse};if(x.error.reason==="status-code")switch(x.error.statusCode){case 400:throw new on(x.error.body,x.rawResponse);case 401:throw new Ut(x.error.body,x.rawResponse);case 403:throw new Lt(x.error.body,x.rawResponse);case 404:throw new Ot(x.error.body,x.rawResponse);case 429:throw new It(x.error.body,x.rawResponse);default:throw new ut({statusCode:x.error.statusCode,body:x.error.body,rawResponse:x.rawResponse})}return Qt(x.error,x.rawResponse,"GET","/identity-providers/{idp_id}/provisioning/scim-tokens")})}create(t,n={},r){return yt.fromPromise(this.__create(t,n,r))}__create(t){return Mh(this,arguments,void 0,function*(n,r={},o){var s,u,c,d,p,m,g,y,A,w;const b={security:[{OAuth2ClientCredentials:["create:my_org:identity_providers_scim_tokens"]},{OAuth2AuthCode:["create:my_org:identity_providers_scim_tokens"]}]},x=yield this._options.authProvider.getAuthRequest({endpointMetadata:b});let E=Ht(x.headers,(s=this._options)===null||s===void 0?void 0:s.headers,o?.headers);const S=yield((u=this._options.fetcher)!==null&&u!==void 0?u:Nt)({url:Tt((d=(c=yield Ne.get(this._options.baseUrl))!==null&&c!==void 0?c:yield Ne.get(this._options.environment))!==null&&d!==void 0?d:Vt.Default,`identity-providers/${mn(n)}/provisioning/scim-tokens`),method:"POST",headers:E,contentType:"application/json",queryParameters:o?.queryParams,requestType:"json",body:r,timeoutMs:((g=(p=o?.timeoutInSeconds)!==null&&p!==void 0?p:(m=this._options)===null||m===void 0?void 0:m.timeoutInSeconds)!==null&&g!==void 0?g:60)*1e3,maxRetries:(y=o?.maxRetries)!==null&&y!==void 0?y:(A=this._options)===null||A===void 0?void 0:A.maxRetries,abortSignal:o?.abortSignal,endpointMetadata:b,fetchFn:(w=this._options)===null||w===void 0?void 0:w.fetch,logging:this._options.logging});if(S.ok)return{data:S.body,rawResponse:S.rawResponse};if(S.error.reason==="status-code")switch(S.error.statusCode){case 400:throw new on(S.error.body,S.rawResponse);case 401:throw new Ut(S.error.body,S.rawResponse);case 403:throw new Lt(S.error.body,S.rawResponse);case 404:throw new Ot(S.error.body,S.rawResponse);case 429:throw new It(S.error.body,S.rawResponse);default:throw new ut({statusCode:S.error.statusCode,body:S.error.body,rawResponse:S.rawResponse})}return Qt(S.error,S.rawResponse,"POST","/identity-providers/{idp_id}/provisioning/scim-tokens")})}delete(t,n,r){return yt.fromPromise(this.__delete(t,n,r))}__delete(t,n,r){return Mh(this,void 0,void 0,function*(){var o,s,u,c,d,p,m,g,y,A;const w={security:[{OAuth2ClientCredentials:["delete:my_org:identity_providers_scim_tokens"]},{OAuth2AuthCode:["delete:my_org:identity_providers_scim_tokens"]}]},b=yield this._options.authProvider.getAuthRequest({endpointMetadata:w});let x=Ht(b.headers,(o=this._options)===null||o===void 0?void 0:o.headers,r?.headers);const E=yield((s=this._options.fetcher)!==null&&s!==void 0?s:Nt)({url:Tt((c=(u=yield Ne.get(this._options.baseUrl))!==null&&u!==void 0?u:yield Ne.get(this._options.environment))!==null&&c!==void 0?c:Vt.Default,`identity-providers/${mn(t)}/provisioning/scim-tokens/${mn(n)}`),method:"DELETE",headers:x,queryParameters:r?.queryParams,timeoutMs:((m=(d=r?.timeoutInSeconds)!==null&&d!==void 0?d:(p=this._options)===null||p===void 0?void 0:p.timeoutInSeconds)!==null&&m!==void 0?m:60)*1e3,maxRetries:(g=r?.maxRetries)!==null&&g!==void 0?g:(y=this._options)===null||y===void 0?void 0:y.maxRetries,abortSignal:r?.abortSignal,endpointMetadata:w,fetchFn:(A=this._options)===null||A===void 0?void 0:A.fetch,logging:this._options.logging});if(E.ok)return{data:void 0,rawResponse:E.rawResponse};if(E.error.reason==="status-code")switch(E.error.statusCode){case 400:throw new on(E.error.body,E.rawResponse);case 401:throw new Ut(E.error.body,E.rawResponse);case 403:throw new Lt(E.error.body,E.rawResponse);case 404:throw new Ot(E.error.body,E.rawResponse);case 429:throw new It(E.error.body,E.rawResponse);default:throw new ut({statusCode:E.error.statusCode,body:E.error.body,rawResponse:E.rawResponse})}return Qt(E.error,E.rawResponse,"DELETE","/identity-providers/{idp_id}/provisioning/scim-tokens/{idp_scim_token_id}")})}}var nd=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};class GF{constructor(t){this._options=Wr(t)}get scimTokens(){var t;return(t=this._scimTokens)!==null&&t!==void 0?t:this._scimTokens=new QF(this._options)}get(t,n){return yt.fromPromise(this.__get(t,n))}__get(t,n){return nd(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{OAuth2ClientCredentials:["read:my_org:identity_providers_provisioning"]},{OAuth2AuthCode:["read:my_org:identity_providers_provisioning"]}]},w=yield this._options.authProvider.getAuthRequest({endpointMetadata:A});let b=Ht(w.headers,(r=this._options)===null||r===void 0?void 0:r.headers,n?.headers);const x=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Nt)({url:Tt((u=(s=yield Ne.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Ne.get(this._options.environment))!==null&&u!==void 0?u:Vt.Default,`identity-providers/${mn(t)}/provisioning`),method:"GET",headers:b,queryParameters:n?.queryParams,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch,logging:this._options.logging});if(x.ok)return{data:x.body,rawResponse:x.rawResponse};if(x.error.reason==="status-code")switch(x.error.statusCode){case 400:throw new on(x.error.body,x.rawResponse);case 401:throw new Ut(x.error.body,x.rawResponse);case 403:throw new Lt(x.error.body,x.rawResponse);case 404:throw new Ot(x.error.body,x.rawResponse);case 429:throw new It(x.error.body,x.rawResponse);default:throw new ut({statusCode:x.error.statusCode,body:x.error.body,rawResponse:x.rawResponse})}return Qt(x.error,x.rawResponse,"GET","/identity-providers/{idp_id}/provisioning")})}create(t,n){return yt.fromPromise(this.__create(t,n))}__create(t,n){return nd(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{OAuth2ClientCredentials:["create:my_org:identity_providers_provisioning"]},{OAuth2AuthCode:["create:my_org:identity_providers_provisioning"]}]},w=yield this._options.authProvider.getAuthRequest({endpointMetadata:A});let b=Ht(w.headers,(r=this._options)===null||r===void 0?void 0:r.headers,n?.headers);const x=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Nt)({url:Tt((u=(s=yield Ne.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Ne.get(this._options.environment))!==null&&u!==void 0?u:Vt.Default,`identity-providers/${mn(t)}/provisioning`),method:"POST",headers:b,queryParameters:n?.queryParams,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch,logging:this._options.logging});if(x.ok)return{data:x.body,rawResponse:x.rawResponse};if(x.error.reason==="status-code")switch(x.error.statusCode){case 400:throw new on(x.error.body,x.rawResponse);case 401:throw new Ut(x.error.body,x.rawResponse);case 403:throw new Lt(x.error.body,x.rawResponse);case 404:throw new Ot(x.error.body,x.rawResponse);case 429:throw new It(x.error.body,x.rawResponse);default:throw new ut({statusCode:x.error.statusCode,body:x.error.body,rawResponse:x.rawResponse})}return Qt(x.error,x.rawResponse,"POST","/identity-providers/{idp_id}/provisioning")})}delete(t,n){return yt.fromPromise(this.__delete(t,n))}__delete(t,n){return nd(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{OAuth2ClientCredentials:["delete:my_org:identity_providers_provisioning"]},{OAuth2AuthCode:["delete:my_org:identity_providers_provisioning"]}]},w=yield this._options.authProvider.getAuthRequest({endpointMetadata:A});let b=Ht(w.headers,(r=this._options)===null||r===void 0?void 0:r.headers,n?.headers);const x=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Nt)({url:Tt((u=(s=yield Ne.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Ne.get(this._options.environment))!==null&&u!==void 0?u:Vt.Default,`identity-providers/${mn(t)}/provisioning`),method:"DELETE",headers:b,queryParameters:n?.queryParams,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch,logging:this._options.logging});if(x.ok)return{data:void 0,rawResponse:x.rawResponse};if(x.error.reason==="status-code")switch(x.error.statusCode){case 400:throw new on(x.error.body,x.rawResponse);case 401:throw new Ut(x.error.body,x.rawResponse);case 403:throw new Lt(x.error.body,x.rawResponse);case 404:throw new Ot(x.error.body,x.rawResponse);case 429:throw new It(x.error.body,x.rawResponse);default:throw new ut({statusCode:x.error.statusCode,body:x.error.body,rawResponse:x.rawResponse})}return Qt(x.error,x.rawResponse,"DELETE","/identity-providers/{idp_id}/provisioning")})}updateAttributes(t,n,r){return yt.fromPromise(this.__updateAttributes(t,n,r))}__updateAttributes(t,n,r){return nd(this,void 0,void 0,function*(){var o,s,u,c,d,p,m,g,y,A;const w={security:[{OAuth2ClientCredentials:["update:my_org:identity_providers_provisioning"]},{OAuth2AuthCode:["update:my_org:identity_providers_provisioning"]}]},b=yield this._options.authProvider.getAuthRequest({endpointMetadata:w});let x=Ht(b.headers,(o=this._options)===null||o===void 0?void 0:o.headers,r?.headers);const E=yield((s=this._options.fetcher)!==null&&s!==void 0?s:Nt)({url:Tt((c=(u=yield Ne.get(this._options.baseUrl))!==null&&u!==void 0?u:yield Ne.get(this._options.environment))!==null&&c!==void 0?c:Vt.Default,`identity-providers/${mn(t)}/provisioning/update-attributes`),method:"PUT",headers:x,contentType:"application/json",queryParameters:r?.queryParams,requestType:"json",body:n,timeoutMs:((m=(d=r?.timeoutInSeconds)!==null&&d!==void 0?d:(p=this._options)===null||p===void 0?void 0:p.timeoutInSeconds)!==null&&m!==void 0?m:60)*1e3,maxRetries:(g=r?.maxRetries)!==null&&g!==void 0?g:(y=this._options)===null||y===void 0?void 0:y.maxRetries,abortSignal:r?.abortSignal,endpointMetadata:w,fetchFn:(A=this._options)===null||A===void 0?void 0:A.fetch,logging:this._options.logging});if(E.ok)return{data:E.body,rawResponse:E.rawResponse};if(E.error.reason==="status-code")switch(E.error.statusCode){case 400:throw new on(E.error.body,E.rawResponse);case 401:throw new Ut(E.error.body,E.rawResponse);case 403:throw new Lt(E.error.body,E.rawResponse);case 404:throw new Ot(E.error.body,E.rawResponse);case 429:throw new It(E.error.body,E.rawResponse);default:throw new ut({statusCode:E.error.statusCode,body:E.error.body,rawResponse:E.rawResponse})}return Qt(E.error,E.rawResponse,"PUT","/identity-providers/{idp_id}/provisioning/update-attributes")})}}var Mi=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};class YF{constructor(t){this._options=Wr(t)}get domains(){var t;return(t=this._domains)!==null&&t!==void 0?t:this._domains=new HF(this._options)}get provisioning(){var t;return(t=this._provisioning)!==null&&t!==void 0?t:this._provisioning=new GF(this._options)}list(t){return yt.fromPromise(this.__list(t))}__list(t){return Mi(this,void 0,void 0,function*(){var n,r,o,s,u,c,d,p,m,g;const y={security:[{OAuth2ClientCredentials:["read:my_org:identity_providers"]},{OAuth2AuthCode:["read:my_org:identity_providers"]}]},A=yield this._options.authProvider.getAuthRequest({endpointMetadata:y});let w=Ht(A.headers,(n=this._options)===null||n===void 0?void 0:n.headers,t?.headers);const b=yield((r=this._options.fetcher)!==null&&r!==void 0?r:Nt)({url:Tt((s=(o=yield Ne.get(this._options.baseUrl))!==null&&o!==void 0?o:yield Ne.get(this._options.environment))!==null&&s!==void 0?s:Vt.Default,"identity-providers"),method:"GET",headers:w,queryParameters:t?.queryParams,timeoutMs:((d=(u=t?.timeoutInSeconds)!==null&&u!==void 0?u:(c=this._options)===null||c===void 0?void 0:c.timeoutInSeconds)!==null&&d!==void 0?d:60)*1e3,maxRetries:(p=t?.maxRetries)!==null&&p!==void 0?p:(m=this._options)===null||m===void 0?void 0:m.maxRetries,abortSignal:t?.abortSignal,endpointMetadata:y,fetchFn:(g=this._options)===null||g===void 0?void 0:g.fetch,logging:this._options.logging});if(b.ok)return{data:b.body,rawResponse:b.rawResponse};if(b.error.reason==="status-code")switch(b.error.statusCode){case 401:throw new Ut(b.error.body,b.rawResponse);case 403:throw new Lt(b.error.body,b.rawResponse);case 404:throw new Ot(b.error.body,b.rawResponse);case 429:throw new It(b.error.body,b.rawResponse);default:throw new ut({statusCode:b.error.statusCode,body:b.error.body,rawResponse:b.rawResponse})}return Qt(b.error,b.rawResponse,"GET","/identity-providers")})}create(t,n){return yt.fromPromise(this.__create(t,n))}__create(t,n){return Mi(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{OAuth2ClientCredentials:["create:my_org:identity_providers"]},{OAuth2AuthCode:["create:my_org:identity_providers"]}]},w=yield this._options.authProvider.getAuthRequest({endpointMetadata:A});let b=Ht(w.headers,(r=this._options)===null||r===void 0?void 0:r.headers,n?.headers);const x=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Nt)({url:Tt((u=(s=yield Ne.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Ne.get(this._options.environment))!==null&&u!==void 0?u:Vt.Default,"identity-providers"),method:"POST",headers:b,contentType:"application/json",queryParameters:n?.queryParams,requestType:"json",body:t,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch,logging:this._options.logging});if(x.ok)return{data:x.body,rawResponse:x.rawResponse};if(x.error.reason==="status-code")switch(x.error.statusCode){case 400:throw new on(x.error.body,x.rawResponse);case 401:throw new Ut(x.error.body,x.rawResponse);case 403:throw new Lt(x.error.body,x.rawResponse);case 404:throw new Ot(x.error.body,x.rawResponse);case 409:throw new kh(x.error.body,x.rawResponse);case 429:throw new It(x.error.body,x.rawResponse);default:throw new ut({statusCode:x.error.statusCode,body:x.error.body,rawResponse:x.rawResponse})}return Qt(x.error,x.rawResponse,"POST","/identity-providers")})}get(t,n){return yt.fromPromise(this.__get(t,n))}__get(t,n){return Mi(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{OAuth2ClientCredentials:["read:my_org:identity_providers"]},{OAuth2AuthCode:["read:my_org:identity_providers"]}]},w=yield this._options.authProvider.getAuthRequest({endpointMetadata:A});let b=Ht(w.headers,(r=this._options)===null||r===void 0?void 0:r.headers,n?.headers);const x=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Nt)({url:Tt((u=(s=yield Ne.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Ne.get(this._options.environment))!==null&&u!==void 0?u:Vt.Default,`identity-providers/${mn(t)}`),method:"GET",headers:b,queryParameters:n?.queryParams,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch,logging:this._options.logging});if(x.ok)return{data:x.body,rawResponse:x.rawResponse};if(x.error.reason==="status-code")switch(x.error.statusCode){case 400:throw new on(x.error.body,x.rawResponse);case 401:throw new Ut(x.error.body,x.rawResponse);case 403:throw new Lt(x.error.body,x.rawResponse);case 404:throw new Ot(x.error.body,x.rawResponse);case 429:throw new It(x.error.body,x.rawResponse);default:throw new ut({statusCode:x.error.statusCode,body:x.error.body,rawResponse:x.rawResponse})}return Qt(x.error,x.rawResponse,"GET","/identity-providers/{idp_id}")})}delete(t,n){return yt.fromPromise(this.__delete(t,n))}__delete(t,n){return Mi(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{OAuth2ClientCredentials:["delete:my_org:identity_providers"]},{OAuth2AuthCode:["delete:my_org:identity_providers"]}]},w=yield this._options.authProvider.getAuthRequest({endpointMetadata:A});let b=Ht(w.headers,(r=this._options)===null||r===void 0?void 0:r.headers,n?.headers);const x=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Nt)({url:Tt((u=(s=yield Ne.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Ne.get(this._options.environment))!==null&&u!==void 0?u:Vt.Default,`identity-providers/${mn(t)}`),method:"DELETE",headers:b,queryParameters:n?.queryParams,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch,logging:this._options.logging});if(x.ok)return{data:void 0,rawResponse:x.rawResponse};if(x.error.reason==="status-code")switch(x.error.statusCode){case 400:throw new on(x.error.body,x.rawResponse);case 401:throw new Ut(x.error.body,x.rawResponse);case 403:throw new Lt(x.error.body,x.rawResponse);case 404:throw new Ot(x.error.body,x.rawResponse);case 429:throw new It(x.error.body,x.rawResponse);default:throw new ut({statusCode:x.error.statusCode,body:x.error.body,rawResponse:x.rawResponse})}return Qt(x.error,x.rawResponse,"DELETE","/identity-providers/{idp_id}")})}update(t,n,r){return yt.fromPromise(this.__update(t,n,r))}__update(t,n,r){return Mi(this,void 0,void 0,function*(){var o,s,u,c,d,p,m,g,y,A;const w={security:[{OAuth2ClientCredentials:["update:my_org:identity_providers"]},{OAuth2AuthCode:["update:my_org:identity_providers"]}]},b=yield this._options.authProvider.getAuthRequest({endpointMetadata:w});let x=Ht(b.headers,(o=this._options)===null||o===void 0?void 0:o.headers,r?.headers);const E=yield((s=this._options.fetcher)!==null&&s!==void 0?s:Nt)({url:Tt((c=(u=yield Ne.get(this._options.baseUrl))!==null&&u!==void 0?u:yield Ne.get(this._options.environment))!==null&&c!==void 0?c:Vt.Default,`identity-providers/${mn(t)}`),method:"PATCH",headers:x,contentType:"application/json",queryParameters:r?.queryParams,requestType:"json",body:n,timeoutMs:((m=(d=r?.timeoutInSeconds)!==null&&d!==void 0?d:(p=this._options)===null||p===void 0?void 0:p.timeoutInSeconds)!==null&&m!==void 0?m:60)*1e3,maxRetries:(g=r?.maxRetries)!==null&&g!==void 0?g:(y=this._options)===null||y===void 0?void 0:y.maxRetries,abortSignal:r?.abortSignal,endpointMetadata:w,fetchFn:(A=this._options)===null||A===void 0?void 0:A.fetch,logging:this._options.logging});if(E.ok)return{data:E.body,rawResponse:E.rawResponse};if(E.error.reason==="status-code")switch(E.error.statusCode){case 400:throw new on(E.error.body,E.rawResponse);case 401:throw new Ut(E.error.body,E.rawResponse);case 403:throw new Lt(E.error.body,E.rawResponse);case 404:throw new Ot(E.error.body,E.rawResponse);case 429:throw new It(E.error.body,E.rawResponse);default:throw new ut({statusCode:E.error.statusCode,body:E.error.body,rawResponse:E.rawResponse})}return Qt(E.error,E.rawResponse,"PATCH","/identity-providers/{idp_id}")})}updateAttributes(t,n,r){return yt.fromPromise(this.__updateAttributes(t,n,r))}__updateAttributes(t,n,r){return Mi(this,void 0,void 0,function*(){var o,s,u,c,d,p,m,g,y,A;const w={security:[{OAuth2ClientCredentials:["update:my_org:identity_providers"]},{OAuth2AuthCode:["update:my_org:identity_providers"]}]},b=yield this._options.authProvider.getAuthRequest({endpointMetadata:w});let x=Ht(b.headers,(o=this._options)===null||o===void 0?void 0:o.headers,r?.headers);const E=yield((s=this._options.fetcher)!==null&&s!==void 0?s:Nt)({url:Tt((c=(u=yield Ne.get(this._options.baseUrl))!==null&&u!==void 0?u:yield Ne.get(this._options.environment))!==null&&c!==void 0?c:Vt.Default,`identity-providers/${mn(t)}/update-attributes`),method:"PUT",headers:x,contentType:"application/json",queryParameters:r?.queryParams,requestType:"json",body:n,timeoutMs:((m=(d=r?.timeoutInSeconds)!==null&&d!==void 0?d:(p=this._options)===null||p===void 0?void 0:p.timeoutInSeconds)!==null&&m!==void 0?m:60)*1e3,maxRetries:(g=r?.maxRetries)!==null&&g!==void 0?g:(y=this._options)===null||y===void 0?void 0:y.maxRetries,abortSignal:r?.abortSignal,endpointMetadata:w,fetchFn:(A=this._options)===null||A===void 0?void 0:A.fetch,logging:this._options.logging});if(E.ok)return{data:E.body,rawResponse:E.rawResponse};if(E.error.reason==="status-code")switch(E.error.statusCode){case 400:throw new on(E.error.body,E.rawResponse);case 401:throw new Ut(E.error.body,E.rawResponse);case 403:throw new Lt(E.error.body,E.rawResponse);case 404:throw new Ot(E.error.body,E.rawResponse);case 429:throw new It(E.error.body,E.rawResponse);default:throw new ut({statusCode:E.error.statusCode,body:E.error.body,rawResponse:E.rawResponse})}return Qt(E.error,E.rawResponse,"PUT","/identity-providers/{idp_id}/update-attributes")})}detach(t,n){return yt.fromPromise(this.__detach(t,n))}__detach(t,n){return Mi(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{OAuth2ClientCredentials:["update:my_org:identity_providers_detach"]},{OAuth2AuthCode:["update:my_org:identity_providers_detach"]}]},w=yield this._options.authProvider.getAuthRequest({endpointMetadata:A});let b=Ht(w.headers,(r=this._options)===null||r===void 0?void 0:r.headers,n?.headers);const x=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Nt)({url:Tt((u=(s=yield Ne.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Ne.get(this._options.environment))!==null&&u!==void 0?u:Vt.Default,`identity-providers/${mn(t)}/detach`),method:"POST",headers:b,queryParameters:n?.queryParams,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch,logging:this._options.logging});if(x.ok)return{data:void 0,rawResponse:x.rawResponse};if(x.error.reason==="status-code")switch(x.error.statusCode){case 400:throw new on(x.error.body,x.rawResponse);case 401:throw new Ut(x.error.body,x.rawResponse);case 403:throw new Lt(x.error.body,x.rawResponse);case 404:throw new Ot(x.error.body,x.rawResponse);case 429:throw new It(x.error.body,x.rawResponse);default:throw new ut({statusCode:x.error.statusCode,body:x.error.body,rawResponse:x.rawResponse})}return Qt(x.error,x.rawResponse,"POST","/identity-providers/{idp_id}/detach")})}}class KF{constructor(t){this._options=Wr(t)}get configuration(){var t;return(t=this._configuration)!==null&&t!==void 0?t:this._configuration=new zF(this._options)}get domains(){var t;return(t=this._domains)!==null&&t!==void 0?t:this._domains=new VF(this._options)}get identityProviders(){var t;return(t=this._identityProviders)!==null&&t!==void 0?t:this._identityProviders=new YF(this._options)}}var hy=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};class qF{constructor(t){this._options=Wr(t)}get(t){return yt.fromPromise(this.__get(t))}__get(t){return hy(this,void 0,void 0,function*(){var n,r,o,s,u,c,d,p,m,g;const y={security:[{OAuth2ClientCredentials:["read:my_org:details"]},{OAuth2AuthCode:["read:my_org:details"]}]},A=yield this._options.authProvider.getAuthRequest({endpointMetadata:y});let w=Ht(A.headers,(n=this._options)===null||n===void 0?void 0:n.headers,t?.headers);const b=yield((r=this._options.fetcher)!==null&&r!==void 0?r:Nt)({url:Tt((s=(o=yield Ne.get(this._options.baseUrl))!==null&&o!==void 0?o:yield Ne.get(this._options.environment))!==null&&s!==void 0?s:Vt.Default,"details"),method:"GET",headers:w,queryParameters:t?.queryParams,timeoutMs:((d=(u=t?.timeoutInSeconds)!==null&&u!==void 0?u:(c=this._options)===null||c===void 0?void 0:c.timeoutInSeconds)!==null&&d!==void 0?d:60)*1e3,maxRetries:(p=t?.maxRetries)!==null&&p!==void 0?p:(m=this._options)===null||m===void 0?void 0:m.maxRetries,abortSignal:t?.abortSignal,endpointMetadata:y,fetchFn:(g=this._options)===null||g===void 0?void 0:g.fetch,logging:this._options.logging});if(b.ok)return{data:b.body,rawResponse:b.rawResponse};if(b.error.reason==="status-code")switch(b.error.statusCode){case 401:throw new Ut(b.error.body,b.rawResponse);case 403:throw new Lt(b.error.body,b.rawResponse);case 404:throw new Ot(b.error.body,b.rawResponse);case 429:throw new It(b.error.body,b.rawResponse);default:throw new ut({statusCode:b.error.statusCode,body:b.error.body,rawResponse:b.rawResponse})}return Qt(b.error,b.rawResponse,"GET","/details")})}update(t,n){return yt.fromPromise(this.__update(t,n))}__update(t,n){return hy(this,void 0,void 0,function*(){var r,o,s,u,c,d,p,m,g,y;const A={security:[{OAuth2ClientCredentials:["update:my_org:details"]},{OAuth2AuthCode:["update:my_org:details"]}]},w=yield this._options.authProvider.getAuthRequest({endpointMetadata:A});let b=Ht(w.headers,(r=this._options)===null||r===void 0?void 0:r.headers,n?.headers);const x=yield((o=this._options.fetcher)!==null&&o!==void 0?o:Nt)({url:Tt((u=(s=yield Ne.get(this._options.baseUrl))!==null&&s!==void 0?s:yield Ne.get(this._options.environment))!==null&&u!==void 0?u:Vt.Default,"details"),method:"PATCH",headers:b,contentType:"application/json",queryParameters:n?.queryParams,requestType:"json",body:t,timeoutMs:((p=(c=n?.timeoutInSeconds)!==null&&c!==void 0?c:(d=this._options)===null||d===void 0?void 0:d.timeoutInSeconds)!==null&&p!==void 0?p:60)*1e3,maxRetries:(m=n?.maxRetries)!==null&&m!==void 0?m:(g=this._options)===null||g===void 0?void 0:g.maxRetries,abortSignal:n?.abortSignal,endpointMetadata:A,fetchFn:(y=this._options)===null||y===void 0?void 0:y.fetch,logging:this._options.logging});if(x.ok)return{data:x.body,rawResponse:x.rawResponse};if(x.error.reason==="status-code")switch(x.error.statusCode){case 400:throw new on(x.error.body,x.rawResponse);case 401:throw new Ut(x.error.body,x.rawResponse);case 403:throw new Lt(x.error.body,x.rawResponse);case 404:throw new Ot(x.error.body,x.rawResponse);case 429:throw new It(x.error.body,x.rawResponse);default:throw new ut({statusCode:x.error.statusCode,body:x.error.body,rawResponse:x.rawResponse})}return Qt(x.error,x.rawResponse,"PATCH","/details")})}}var my=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};let ZF=class{constructor(t){this._options=Wr(t)}get organizationDetails(){var t;return(t=this._organizationDetails)!==null&&t!==void 0?t:this._organizationDetails=new qF(this._options)}get organization(){var t;return(t=this._organization)!==null&&t!==void 0?t:this._organization=new KF(this._options)}fetch(t,n,r){return my(this,void 0,void 0,function*(){var o;return _F(t,n,{baseUrl:(o=this._options.baseUrl)!==null&&o!==void 0?o:this._options.environment,headers:this._options.headers,timeoutInSeconds:this._options.timeoutInSeconds,maxRetries:this._options.maxRetries,fetch:this._options.fetch,logging:this._options.logging,getAuthHeaders:()=>my(this,void 0,void 0,function*(){return(yield this._options.authProvider.getAuthRequest()).headers})},r)})}};function WF(e){return Y8(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=/g,"")}function XF(e){const t=JSON.stringify(e);return WF(t)}const $F="1.0.0";function JF(){var e,t;const n=(e=Rs?.type)!==null&&e!==void 0?e:"unknown",r=n==="workerd"?"cloudflare-workers":n,o=(t=Rs?.version)!==null&&t!==void 0?t:"unknown";return{name:"myorganization-js",version:$F,env:{[r]:o}}}class eR{constructor(t={}){this.clientInfo=t.clientInfo||JF()}getAuth0ClientHeader(){if(typeof this.clientInfo.name=="string"&&this.clientInfo.name.length>0)return XF(this.clientInfo)}getHeaders(t={}){const n=this.getAuth0ClientHeader();return n?Object.assign(Object.assign({},t),{"Auth0-Client":n}):t}}var tR=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,t||[])).next())})};function nR(e){if(typeof e=="string")return e;if(typeof e=="function")return t=>tR(this,[t],void 0,function*({endpointMetadata:n}){const o=py(n??{}).join(" ");return yield e({scope:o})});throw new Error("Invalid token supplier provided")}function py(e){if(!e.security)return[];const t=new Set;for(const n of e.security)for(const r of Object.values(n))for(const o of r)t.add(o);return[...t]}var rR=function(e,t,n,r){function o(s){return s instanceof n?s:new n(function(u){u(s)})}return new(n||(n=Promise))(function(s,u){function c(m){try{p(r.next(m))}catch(g){u(g)}}function d(m){try{p(r.throw(m))}catch(g){u(g)}}function p(m){m.done?s(m.value):o(m.value).then(c,d)}p((r=r.apply(e,[])).next())})};class gy extends ZF{constructor(t){const r=`https://${t.domain.replace(/^https?:\/\//,"").replace(/\/$/,"")}/my-org`,o=`${r}/`,s=oR(t),u=iR(t),c=!vy(t)&&!Ay(t),d="fetcher"in t&&t.fetcher?sR(t.fetcher,o,c):void 0,p=Object.assign(Object.assign({baseUrl:t.baseUrl||r,headers:s,logging:t.logging,timeoutInSeconds:t.timeoutInSeconds,maxRetries:t.maxRetries},d&&{fetcher:d}),u!==void 0&&{token:u});super(p)}}function vy(e){return"token"in e}function Ay(e){return"tokenProvider"in e}function aR(e){return"fetcher"in e}function oR(e){var t;const n=Object.assign({},(t=e.headers)!==null&&t!==void 0?t:{});if(e.telemetry!==!1){const o=new eR({clientInfo:e.clientInfo}).getAuth0ClientHeader();o&&(n["Auth0-Client"]=o)}return n}function iR(e){if(vy(e))return nR(e.token);if(Ay(e))return()=>e.tokenProvider.getToken();if(aR(e))return"";throw new Error("MyOrganizationClient must be configured with either 'token', 'tokenProvider', or 'fetcher' (that handles authorization headers)")}function sR(e,t,n){return r=>rR(this,void 0,void 0,function*(){const o=r.endpointMetadata?py(r.endpointMetadata):[],s=o.length>0?{scope:o,audience:t}:void 0;n&&r.headers&&(r=Object.assign(Object.assign({},r),{headers:Object.fromEntries(Object.entries(r.headers).filter(([c,d])=>!(c.toLowerCase()==="authorization"&&d==="Bearer ")))}));const u=(c,d)=>{const p=c instanceof Request?c.url:String(c);return typeof Headers<"u"&&d?.headers instanceof Headers&&(d=Object.assign(Object.assign({},d),{headers:Object.fromEntries(d.headers.entries())})),e(p,d,s)};return Nt(Object.assign(Object.assign({},r),{fetchFn:u}))})}var At;(function(e){e.assertEqual=o=>{};function t(o){}e.assertIs=t;function n(o){throw new Error}e.assertNever=n,e.arrayToEnum=o=>{const s={};for(const u of o)s[u]=u;return s},e.getValidEnumValues=o=>{const s=e.objectKeys(o).filter(c=>typeof o[o[c]]!="number"),u={};for(const c of s)u[c]=o[c];return e.objectValues(u)},e.objectValues=o=>e.objectKeys(o).map(function(s){return o[s]}),e.objectKeys=typeof Object.keys=="function"?o=>Object.keys(o):o=>{const s=[];for(const u in o)Object.prototype.hasOwnProperty.call(o,u)&&s.push(u);return s},e.find=(o,s)=>{for(const u of o)if(s(u))return u},e.isInteger=typeof Number.isInteger=="function"?o=>Number.isInteger(o):o=>typeof o=="number"&&Number.isFinite(o)&&Math.floor(o)===o;function r(o,s=" | "){return o.map(u=>typeof u=="string"?`'${u}'`:u).join(s)}e.joinValues=r,e.jsonStringifyReplacer=(o,s)=>typeof s=="bigint"?s.toString():s})(At||(At={}));var yy;(function(e){e.mergeShapes=(t,n)=>({...t,...n})})(yy||(yy={}));const Be=At.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),No=e=>{switch(typeof e){case"undefined":return Be.undefined;case"string":return Be.string;case"number":return Number.isNaN(e)?Be.nan:Be.number;case"boolean":return Be.boolean;case"function":return Be.function;case"bigint":return Be.bigint;case"symbol":return Be.symbol;case"object":return Array.isArray(e)?Be.array:e===null?Be.null:e.then&&typeof e.then=="function"&&e.catch&&typeof e.catch=="function"?Be.promise:typeof Map<"u"&&e instanceof Map?Be.map:typeof Set<"u"&&e instanceof Set?Be.set:typeof Date<"u"&&e instanceof Date?Be.date:Be.object;default:return Be.unknown}},ge=At.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);class ro extends Error{get errors(){return this.issues}constructor(t){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};const n=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,n):this.__proto__=n,this.name="ZodError",this.issues=t}format(t){const n=t||function(s){return s.message},r={_errors:[]},o=s=>{for(const u of s.issues)if(u.code==="invalid_union")u.unionErrors.map(o);else if(u.code==="invalid_return_type")o(u.returnTypeError);else if(u.code==="invalid_arguments")o(u.argumentsError);else if(u.path.length===0)r._errors.push(n(u));else{let c=r,d=0;for(;dn.message){const n={},r=[];for(const o of this.issues)if(o.path.length>0){const s=o.path[0];n[s]=n[s]||[],n[s].push(t(o))}else r.push(t(o));return{formErrors:r,fieldErrors:n}}get formErrors(){return this.flatten()}}ro.create=e=>new ro(e);const Nh=(e,t)=>{let n;switch(e.code){case ge.invalid_type:e.received===Be.undefined?n="Required":n=`Expected ${e.expected}, received ${e.received}`;break;case ge.invalid_literal:n=`Invalid literal value, expected ${JSON.stringify(e.expected,At.jsonStringifyReplacer)}`;break;case ge.unrecognized_keys:n=`Unrecognized key(s) in object: ${At.joinValues(e.keys,", ")}`;break;case ge.invalid_union:n="Invalid input";break;case ge.invalid_union_discriminator:n=`Invalid discriminator value. Expected ${At.joinValues(e.options)}`;break;case ge.invalid_enum_value:n=`Invalid enum value. Expected ${At.joinValues(e.options)}, received '${e.received}'`;break;case ge.invalid_arguments:n="Invalid function arguments";break;case ge.invalid_return_type:n="Invalid function return type";break;case ge.invalid_date:n="Invalid date";break;case ge.invalid_string:typeof e.validation=="object"?"includes"in e.validation?(n=`Invalid input: must include "${e.validation.includes}"`,typeof e.validation.position=="number"&&(n=`${n} at one or more positions greater than or equal to ${e.validation.position}`)):"startsWith"in e.validation?n=`Invalid input: must start with "${e.validation.startsWith}"`:"endsWith"in e.validation?n=`Invalid input: must end with "${e.validation.endsWith}"`:At.assertNever(e.validation):e.validation!=="regex"?n=`Invalid ${e.validation}`:n="Invalid";break;case ge.too_small:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at least":"more than"} ${e.minimum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at least":"over"} ${e.minimum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="bigint"?n=`Number must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${e.minimum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly equal to ":e.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(e.minimum))}`:n="Invalid input";break;case ge.too_big:e.type==="array"?n=`Array must contain ${e.exact?"exactly":e.inclusive?"at most":"less than"} ${e.maximum} element(s)`:e.type==="string"?n=`String must contain ${e.exact?"exactly":e.inclusive?"at most":"under"} ${e.maximum} character(s)`:e.type==="number"?n=`Number must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="bigint"?n=`BigInt must be ${e.exact?"exactly":e.inclusive?"less than or equal to":"less than"} ${e.maximum}`:e.type==="date"?n=`Date must be ${e.exact?"exactly":e.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(e.maximum))}`:n="Invalid input";break;case ge.custom:n="Invalid input";break;case ge.invalid_intersection_types:n="Intersection results could not be merged";break;case ge.not_multiple_of:n=`Number must be a multiple of ${e.multipleOf}`;break;case ge.not_finite:n="Number must be finite";break;default:n=t.defaultError,At.assertNever(e)}return{message:n}};let uR=Nh;function lR(){return uR}const cR=e=>{const{data:t,path:n,errorMaps:r,issueData:o}=e,s=[...n,...o.path||[]],u={...o,path:s};if(o.message!==void 0)return{...o,path:s,message:o.message};let c="";const d=r.filter(p=>!!p).slice().reverse();for(const p of d)c=p(u,{data:t,defaultError:c}).message;return{...o,path:s,message:c}};function we(e,t){const n=lR(),r=cR({issueData:t,data:e.data,path:e.path,errorMaps:[e.common.contextualErrorMap,e.schemaErrorMap,n,n===Nh?void 0:Nh].filter(o=>!!o)});e.common.issues.push(r)}class Ar{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(t,n){const r=[];for(const o of n){if(o.status==="aborted")return Ge;o.status==="dirty"&&t.dirty(),r.push(o.value)}return{status:t.value,value:r}}static async mergeObjectAsync(t,n){const r=[];for(const o of n){const s=await o.key,u=await o.value;r.push({key:s,value:u})}return Ar.mergeObjectSync(t,r)}static mergeObjectSync(t,n){const r={};for(const o of n){const{key:s,value:u}=o;if(s.status==="aborted"||u.status==="aborted")return Ge;s.status==="dirty"&&t.dirty(),u.status==="dirty"&&t.dirty(),s.value!=="__proto__"&&(typeof u.value<"u"||o.alwaysSet)&&(r[s.value]=u.value)}return{status:t.value,value:r}}}const Ge=Object.freeze({status:"aborted"}),vl=e=>({status:"dirty",value:e}),Xr=e=>({status:"valid",value:e}),by=e=>e.status==="aborted",xy=e=>e.status==="dirty",Bs=e=>e.status==="valid",rd=e=>typeof Promise<"u"&&e instanceof Promise;var Me;(function(e){e.errToObj=t=>typeof t=="string"?{message:t}:t||{},e.toString=t=>typeof t=="string"?t:t?.message})(Me||(Me={}));class To{constructor(t,n,r,o){this._cachedPath=[],this.parent=t,this.data=n,this._path=r,this._key=o}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const _y=(e,t)=>{if(Bs(t))return{success:!0,data:t.value};if(!e.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const n=new ro(e.common.issues);return this._error=n,this._error}}};function rt(e){if(!e)return{};const{errorMap:t,invalid_type_error:n,required_error:r,description:o}=e;if(t&&(n||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return t?{errorMap:t,description:o}:{errorMap:(u,c)=>{const{message:d}=e;return u.code==="invalid_enum_value"?{message:d??c.defaultError}:typeof c.data>"u"?{message:d??r??c.defaultError}:u.code!=="invalid_type"?{message:c.defaultError}:{message:d??n??c.defaultError}},description:o}}class gt{get description(){return this._def.description}_getType(t){return No(t.data)}_getOrReturnCtx(t,n){return n||{common:t.parent.common,data:t.data,parsedType:No(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}_processInputParams(t){return{status:new Ar,ctx:{common:t.parent.common,data:t.data,parsedType:No(t.data),schemaErrorMap:this._def.errorMap,path:t.path,parent:t.parent}}}_parseSync(t){const n=this._parse(t);if(rd(n))throw new Error("Synchronous parse encountered promise.");return n}_parseAsync(t){const n=this._parse(t);return Promise.resolve(n)}parse(t,n){const r=this.safeParse(t,n);if(r.success)return r.data;throw r.error}safeParse(t,n){const r={common:{issues:[],async:n?.async??!1,contextualErrorMap:n?.errorMap},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:No(t)},o=this._parseSync({data:t,path:r.path,parent:r});return _y(r,o)}"~validate"(t){const n={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:No(t)};if(!this["~standard"].async)try{const r=this._parseSync({data:t,path:[],parent:n});return Bs(r)?{value:r.value}:{issues:n.common.issues}}catch(r){r?.message?.toLowerCase()?.includes("encountered")&&(this["~standard"].async=!0),n.common={issues:[],async:!0}}return this._parseAsync({data:t,path:[],parent:n}).then(r=>Bs(r)?{value:r.value}:{issues:n.common.issues})}async parseAsync(t,n){const r=await this.safeParseAsync(t,n);if(r.success)return r.data;throw r.error}async safeParseAsync(t,n){const r={common:{issues:[],contextualErrorMap:n?.errorMap,async:!0},path:n?.path||[],schemaErrorMap:this._def.errorMap,parent:null,data:t,parsedType:No(t)},o=this._parse({data:t,path:r.path,parent:r}),s=await(rd(o)?o:Promise.resolve(o));return _y(r,s)}refine(t,n){const r=o=>typeof n=="string"||typeof n>"u"?{message:n}:typeof n=="function"?n(o):n;return this._refinement((o,s)=>{const u=t(o),c=()=>s.addIssue({code:ge.custom,...r(o)});return typeof Promise<"u"&&u instanceof Promise?u.then(d=>d?!0:(c(),!1)):u?!0:(c(),!1)})}refinement(t,n){return this._refinement((r,o)=>t(r)?!0:(o.addIssue(typeof n=="function"?n(r,o):n),!1))}_refinement(t){return new ji({schema:this,typeName:Ye.ZodEffects,effect:{type:"refinement",refinement:t}})}superRefine(t){return this._refinement(t)}constructor(t){this.spa=this.safeParseAsync,this._def=t,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:n=>this["~validate"](n)}}optional(){return oo.create(this,this._def)}nullable(){return Pi.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return Ma.create(this)}promise(){return ud.create(this,this._def)}or(t){return od.create([this,t],this._def)}and(t){return id.create(this,t,this._def)}transform(t){return new ji({...rt(this._def),schema:this,typeName:Ye.ZodEffects,effect:{type:"transform",transform:t}})}default(t){const n=typeof t=="function"?t:()=>t;return new ld({...rt(this._def),innerType:this,defaultValue:n,typeName:Ye.ZodDefault})}brand(){return new My({typeName:Ye.ZodBranded,type:this,...rt(this._def)})}catch(t){const n=typeof t=="function"?t:()=>t;return new cd({...rt(this._def),innerType:this,catchValue:n,typeName:Ye.ZodCatch})}describe(t){const n=this.constructor;return new n({...this._def,description:t})}pipe(t){return Vh.create(this,t)}readonly(){return dd.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const dR=/^c[^\s-]{8,}$/i,fR=/^[0-9a-z]+$/,hR=/^[0-9A-HJKMNP-TV-Z]{26}$/i,mR=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,pR=/^[a-z0-9_-]{21}$/i,gR=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,vR=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,AR=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,yR="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let Th;const bR=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,xR=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,_R=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,CR=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,wR=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,ER=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Cy="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",SR=new RegExp(`^${Cy}$`);function wy(e){let t="[0-5]\\d";e.precision?t=`${t}\\.\\d{${e.precision}}`:e.precision==null&&(t=`${t}(\\.\\d+)?`);const n=e.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${t})${n}`}function DR(e){return new RegExp(`^${wy(e)}$`)}function FR(e){let t=`${Cy}T${wy(e)}`;const n=[];return n.push(e.local?"Z?":"Z"),e.offset&&n.push("([+-]\\d{2}:?\\d{2})"),t=`${t}(${n.join("|")})`,new RegExp(`^${t}$`)}function RR(e,t){return!!((t==="v4"||!t)&&bR.test(e)||(t==="v6"||!t)&&_R.test(e))}function BR(e,t){if(!gR.test(e))return!1;try{const[n]=e.split(".");if(!n)return!1;const r=n.replace(/-/g,"+").replace(/_/g,"/").padEnd(n.length+(4-n.length%4)%4,"="),o=JSON.parse(atob(r));return!(typeof o!="object"||o===null||"typ"in o&&o?.typ!=="JWT"||!o.alg||t&&o.alg!==t)}catch{return!1}}function kR(e,t){return!!((t==="v4"||!t)&&xR.test(e)||(t==="v6"||!t)&&CR.test(e))}class jo extends gt{_parse(t){if(this._def.coerce&&(t.data=String(t.data)),this._getType(t)!==Be.string){const s=this._getOrReturnCtx(t);return we(s,{code:ge.invalid_type,expected:Be.string,received:s.parsedType}),Ge}const r=new Ar;let o;for(const s of this._def.checks)if(s.kind==="min")t.data.lengths.value&&(o=this._getOrReturnCtx(t,o),we(o,{code:ge.too_big,maximum:s.value,type:"string",inclusive:!0,exact:!1,message:s.message}),r.dirty());else if(s.kind==="length"){const u=t.data.length>s.value,c=t.data.lengtht.test(o),{validation:n,code:ge.invalid_string,...Me.errToObj(r)})}_addCheck(t){return new jo({...this._def,checks:[...this._def.checks,t]})}email(t){return this._addCheck({kind:"email",...Me.errToObj(t)})}url(t){return this._addCheck({kind:"url",...Me.errToObj(t)})}emoji(t){return this._addCheck({kind:"emoji",...Me.errToObj(t)})}uuid(t){return this._addCheck({kind:"uuid",...Me.errToObj(t)})}nanoid(t){return this._addCheck({kind:"nanoid",...Me.errToObj(t)})}cuid(t){return this._addCheck({kind:"cuid",...Me.errToObj(t)})}cuid2(t){return this._addCheck({kind:"cuid2",...Me.errToObj(t)})}ulid(t){return this._addCheck({kind:"ulid",...Me.errToObj(t)})}base64(t){return this._addCheck({kind:"base64",...Me.errToObj(t)})}base64url(t){return this._addCheck({kind:"base64url",...Me.errToObj(t)})}jwt(t){return this._addCheck({kind:"jwt",...Me.errToObj(t)})}ip(t){return this._addCheck({kind:"ip",...Me.errToObj(t)})}cidr(t){return this._addCheck({kind:"cidr",...Me.errToObj(t)})}datetime(t){return typeof t=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:t}):this._addCheck({kind:"datetime",precision:typeof t?.precision>"u"?null:t?.precision,offset:t?.offset??!1,local:t?.local??!1,...Me.errToObj(t?.message)})}date(t){return this._addCheck({kind:"date",message:t})}time(t){return typeof t=="string"?this._addCheck({kind:"time",precision:null,message:t}):this._addCheck({kind:"time",precision:typeof t?.precision>"u"?null:t?.precision,...Me.errToObj(t?.message)})}duration(t){return this._addCheck({kind:"duration",...Me.errToObj(t)})}regex(t,n){return this._addCheck({kind:"regex",regex:t,...Me.errToObj(n)})}includes(t,n){return this._addCheck({kind:"includes",value:t,position:n?.position,...Me.errToObj(n?.message)})}startsWith(t,n){return this._addCheck({kind:"startsWith",value:t,...Me.errToObj(n)})}endsWith(t,n){return this._addCheck({kind:"endsWith",value:t,...Me.errToObj(n)})}min(t,n){return this._addCheck({kind:"min",value:t,...Me.errToObj(n)})}max(t,n){return this._addCheck({kind:"max",value:t,...Me.errToObj(n)})}length(t,n){return this._addCheck({kind:"length",value:t,...Me.errToObj(n)})}nonempty(t){return this.min(1,Me.errToObj(t))}trim(){return new jo({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new jo({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new jo({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(t=>t.kind==="datetime")}get isDate(){return!!this._def.checks.find(t=>t.kind==="date")}get isTime(){return!!this._def.checks.find(t=>t.kind==="time")}get isDuration(){return!!this._def.checks.find(t=>t.kind==="duration")}get isEmail(){return!!this._def.checks.find(t=>t.kind==="email")}get isURL(){return!!this._def.checks.find(t=>t.kind==="url")}get isEmoji(){return!!this._def.checks.find(t=>t.kind==="emoji")}get isUUID(){return!!this._def.checks.find(t=>t.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(t=>t.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(t=>t.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(t=>t.kind==="cuid2")}get isULID(){return!!this._def.checks.find(t=>t.kind==="ulid")}get isIP(){return!!this._def.checks.find(t=>t.kind==="ip")}get isCIDR(){return!!this._def.checks.find(t=>t.kind==="cidr")}get isBase64(){return!!this._def.checks.find(t=>t.kind==="base64")}get isBase64url(){return!!this._def.checks.find(t=>t.kind==="base64url")}get minLength(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxLength(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuenew jo({checks:[],typeName:Ye.ZodString,coerce:e?.coerce??!1,...rt(e)});function MR(e,t){const n=(e.toString().split(".")[1]||"").length,r=(t.toString().split(".")[1]||"").length,o=n>r?n:r,s=Number.parseInt(e.toFixed(o).replace(".","")),u=Number.parseInt(t.toFixed(o).replace(".",""));return s%u/10**o}class ks extends gt{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(t){if(this._def.coerce&&(t.data=Number(t.data)),this._getType(t)!==Be.number){const s=this._getOrReturnCtx(t);return we(s,{code:ge.invalid_type,expected:Be.number,received:s.parsedType}),Ge}let r;const o=new Ar;for(const s of this._def.checks)s.kind==="int"?At.isInteger(t.data)||(r=this._getOrReturnCtx(t,r),we(r,{code:ge.invalid_type,expected:"integer",received:"float",message:s.message}),o.dirty()):s.kind==="min"?(s.inclusive?t.datas.value:t.data>=s.value)&&(r=this._getOrReturnCtx(t,r),we(r,{code:ge.too_big,maximum:s.value,type:"number",inclusive:s.inclusive,exact:!1,message:s.message}),o.dirty()):s.kind==="multipleOf"?MR(t.data,s.value)!==0&&(r=this._getOrReturnCtx(t,r),we(r,{code:ge.not_multiple_of,multipleOf:s.value,message:s.message}),o.dirty()):s.kind==="finite"?Number.isFinite(t.data)||(r=this._getOrReturnCtx(t,r),we(r,{code:ge.not_finite,message:s.message}),o.dirty()):At.assertNever(s);return{status:o.value,value:t.data}}gte(t,n){return this.setLimit("min",t,!0,Me.toString(n))}gt(t,n){return this.setLimit("min",t,!1,Me.toString(n))}lte(t,n){return this.setLimit("max",t,!0,Me.toString(n))}lt(t,n){return this.setLimit("max",t,!1,Me.toString(n))}setLimit(t,n,r,o){return new ks({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:Me.toString(o)}]})}_addCheck(t){return new ks({...this._def,checks:[...this._def.checks,t]})}int(t){return this._addCheck({kind:"int",message:Me.toString(t)})}positive(t){return this._addCheck({kind:"min",value:0,inclusive:!1,message:Me.toString(t)})}negative(t){return this._addCheck({kind:"max",value:0,inclusive:!1,message:Me.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:0,inclusive:!0,message:Me.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:0,inclusive:!0,message:Me.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:Me.toString(n)})}finite(t){return this._addCheck({kind:"finite",message:Me.toString(t)})}safe(t){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:Me.toString(t)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:Me.toString(t)})}get minValue(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuet.kind==="int"||t.kind==="multipleOf"&&At.isInteger(t.value))}get isFinite(){let t=null,n=null;for(const r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(n===null||r.value>n)&&(n=r.value):r.kind==="max"&&(t===null||r.valuenew ks({checks:[],typeName:Ye.ZodNumber,coerce:e?.coerce||!1,...rt(e)});class Al extends gt{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(t){if(this._def.coerce)try{t.data=BigInt(t.data)}catch{return this._getInvalidInput(t)}if(this._getType(t)!==Be.bigint)return this._getInvalidInput(t);let r;const o=new Ar;for(const s of this._def.checks)s.kind==="min"?(s.inclusive?t.datas.value:t.data>=s.value)&&(r=this._getOrReturnCtx(t,r),we(r,{code:ge.too_big,type:"bigint",maximum:s.value,inclusive:s.inclusive,message:s.message}),o.dirty()):s.kind==="multipleOf"?t.data%s.value!==BigInt(0)&&(r=this._getOrReturnCtx(t,r),we(r,{code:ge.not_multiple_of,multipleOf:s.value,message:s.message}),o.dirty()):At.assertNever(s);return{status:o.value,value:t.data}}_getInvalidInput(t){const n=this._getOrReturnCtx(t);return we(n,{code:ge.invalid_type,expected:Be.bigint,received:n.parsedType}),Ge}gte(t,n){return this.setLimit("min",t,!0,Me.toString(n))}gt(t,n){return this.setLimit("min",t,!1,Me.toString(n))}lte(t,n){return this.setLimit("max",t,!0,Me.toString(n))}lt(t,n){return this.setLimit("max",t,!1,Me.toString(n))}setLimit(t,n,r,o){return new Al({...this._def,checks:[...this._def.checks,{kind:t,value:n,inclusive:r,message:Me.toString(o)}]})}_addCheck(t){return new Al({...this._def,checks:[...this._def.checks,t]})}positive(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:Me.toString(t)})}negative(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:Me.toString(t)})}nonpositive(t){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:Me.toString(t)})}nonnegative(t){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:Me.toString(t)})}multipleOf(t,n){return this._addCheck({kind:"multipleOf",value:t,message:Me.toString(n)})}get minValue(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t}get maxValue(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuenew Al({checks:[],typeName:Ye.ZodBigInt,coerce:e?.coerce??!1,...rt(e)});class jh extends gt{_parse(t){if(this._def.coerce&&(t.data=!!t.data),this._getType(t)!==Be.boolean){const r=this._getOrReturnCtx(t);return we(r,{code:ge.invalid_type,expected:Be.boolean,received:r.parsedType}),Ge}return Xr(t.data)}}jh.create=e=>new jh({typeName:Ye.ZodBoolean,coerce:e?.coerce||!1,...rt(e)});class ad extends gt{_parse(t){if(this._def.coerce&&(t.data=new Date(t.data)),this._getType(t)!==Be.date){const s=this._getOrReturnCtx(t);return we(s,{code:ge.invalid_type,expected:Be.date,received:s.parsedType}),Ge}if(Number.isNaN(t.data.getTime())){const s=this._getOrReturnCtx(t);return we(s,{code:ge.invalid_date}),Ge}const r=new Ar;let o;for(const s of this._def.checks)s.kind==="min"?t.data.getTime()s.value&&(o=this._getOrReturnCtx(t,o),we(o,{code:ge.too_big,message:s.message,inclusive:!0,exact:!1,maximum:s.value,type:"date"}),r.dirty()):At.assertNever(s);return{status:r.value,value:new Date(t.data.getTime())}}_addCheck(t){return new ad({...this._def,checks:[...this._def.checks,t]})}min(t,n){return this._addCheck({kind:"min",value:t.getTime(),message:Me.toString(n)})}max(t,n){return this._addCheck({kind:"max",value:t.getTime(),message:Me.toString(n)})}get minDate(){let t=null;for(const n of this._def.checks)n.kind==="min"&&(t===null||n.value>t)&&(t=n.value);return t!=null?new Date(t):null}get maxDate(){let t=null;for(const n of this._def.checks)n.kind==="max"&&(t===null||n.valuenew ad({checks:[],coerce:e?.coerce||!1,typeName:Ye.ZodDate,...rt(e)});class Ey extends gt{_parse(t){if(this._getType(t)!==Be.symbol){const r=this._getOrReturnCtx(t);return we(r,{code:ge.invalid_type,expected:Be.symbol,received:r.parsedType}),Ge}return Xr(t.data)}}Ey.create=e=>new Ey({typeName:Ye.ZodSymbol,...rt(e)});class Ph extends gt{_parse(t){if(this._getType(t)!==Be.undefined){const r=this._getOrReturnCtx(t);return we(r,{code:ge.invalid_type,expected:Be.undefined,received:r.parsedType}),Ge}return Xr(t.data)}}Ph.create=e=>new Ph({typeName:Ye.ZodUndefined,...rt(e)});class zh extends gt{_parse(t){if(this._getType(t)!==Be.null){const r=this._getOrReturnCtx(t);return we(r,{code:ge.invalid_type,expected:Be.null,received:r.parsedType}),Ge}return Xr(t.data)}}zh.create=e=>new zh({typeName:Ye.ZodNull,...rt(e)});class Sy extends gt{constructor(){super(...arguments),this._any=!0}_parse(t){return Xr(t.data)}}Sy.create=e=>new Sy({typeName:Ye.ZodAny,...rt(e)});class Dy extends gt{constructor(){super(...arguments),this._unknown=!0}_parse(t){return Xr(t.data)}}Dy.create=e=>new Dy({typeName:Ye.ZodUnknown,...rt(e)});class Po extends gt{_parse(t){const n=this._getOrReturnCtx(t);return we(n,{code:ge.invalid_type,expected:Be.never,received:n.parsedType}),Ge}}Po.create=e=>new Po({typeName:Ye.ZodNever,...rt(e)});class Fy extends gt{_parse(t){if(this._getType(t)!==Be.undefined){const r=this._getOrReturnCtx(t);return we(r,{code:ge.invalid_type,expected:Be.void,received:r.parsedType}),Ge}return Xr(t.data)}}Fy.create=e=>new Fy({typeName:Ye.ZodVoid,...rt(e)});class Ma extends gt{_parse(t){const{ctx:n,status:r}=this._processInputParams(t),o=this._def;if(n.parsedType!==Be.array)return we(n,{code:ge.invalid_type,expected:Be.array,received:n.parsedType}),Ge;if(o.exactLength!==null){const u=n.data.length>o.exactLength.value,c=n.data.lengtho.maxLength.value&&(we(n,{code:ge.too_big,maximum:o.maxLength.value,type:"array",inclusive:!0,exact:!1,message:o.maxLength.message}),r.dirty()),n.common.async)return Promise.all([...n.data].map((u,c)=>o.type._parseAsync(new To(n,u,n.path,c)))).then(u=>Ar.mergeArray(r,u));const s=[...n.data].map((u,c)=>o.type._parseSync(new To(n,u,n.path,c)));return Ar.mergeArray(r,s)}get element(){return this._def.type}min(t,n){return new Ma({...this._def,minLength:{value:t,message:Me.toString(n)}})}max(t,n){return new Ma({...this._def,maxLength:{value:t,message:Me.toString(n)}})}length(t,n){return new Ma({...this._def,exactLength:{value:t,message:Me.toString(n)}})}nonempty(t){return this.min(1,t)}}Ma.create=(e,t)=>new Ma({type:e,minLength:null,maxLength:null,exactLength:null,typeName:Ye.ZodArray,...rt(t)});function Ms(e){if(e instanceof pn){const t={};for(const n in e.shape){const r=e.shape[n];t[n]=oo.create(Ms(r))}return new pn({...e._def,shape:()=>t})}else return e instanceof Ma?new Ma({...e._def,type:Ms(e.element)}):e instanceof oo?oo.create(Ms(e.unwrap())):e instanceof Pi?Pi.create(Ms(e.unwrap())):e instanceof Ni?Ni.create(e.items.map(t=>Ms(t))):e}class pn extends gt{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const t=this._def.shape(),n=At.objectKeys(t);return this._cached={shape:t,keys:n},this._cached}_parse(t){if(this._getType(t)!==Be.object){const p=this._getOrReturnCtx(t);return we(p,{code:ge.invalid_type,expected:Be.object,received:p.parsedType}),Ge}const{status:r,ctx:o}=this._processInputParams(t),{shape:s,keys:u}=this._getCached(),c=[];if(!(this._def.catchall instanceof Po&&this._def.unknownKeys==="strip"))for(const p in o.data)u.includes(p)||c.push(p);const d=[];for(const p of u){const m=s[p],g=o.data[p];d.push({key:{status:"valid",value:p},value:m._parse(new To(o,g,o.path,p)),alwaysSet:p in o.data})}if(this._def.catchall instanceof Po){const p=this._def.unknownKeys;if(p==="passthrough")for(const m of c)d.push({key:{status:"valid",value:m},value:{status:"valid",value:o.data[m]}});else if(p==="strict")c.length>0&&(we(o,{code:ge.unrecognized_keys,keys:c}),r.dirty());else if(p!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const p=this._def.catchall;for(const m of c){const g=o.data[m];d.push({key:{status:"valid",value:m},value:p._parse(new To(o,g,o.path,m)),alwaysSet:m in o.data})}}return o.common.async?Promise.resolve().then(async()=>{const p=[];for(const m of d){const g=await m.key,y=await m.value;p.push({key:g,value:y,alwaysSet:m.alwaysSet})}return p}).then(p=>Ar.mergeObjectSync(r,p)):Ar.mergeObjectSync(r,d)}get shape(){return this._def.shape()}strict(t){return Me.errToObj,new pn({...this._def,unknownKeys:"strict",...t!==void 0?{errorMap:(n,r)=>{const o=this._def.errorMap?.(n,r).message??r.defaultError;return n.code==="unrecognized_keys"?{message:Me.errToObj(t).message??o}:{message:o}}}:{}})}strip(){return new pn({...this._def,unknownKeys:"strip"})}passthrough(){return new pn({...this._def,unknownKeys:"passthrough"})}extend(t){return new pn({...this._def,shape:()=>({...this._def.shape(),...t})})}merge(t){return new pn({unknownKeys:t._def.unknownKeys,catchall:t._def.catchall,shape:()=>({...this._def.shape(),...t._def.shape()}),typeName:Ye.ZodObject})}setKey(t,n){return this.augment({[t]:n})}catchall(t){return new pn({...this._def,catchall:t})}pick(t){const n={};for(const r of At.objectKeys(t))t[r]&&this.shape[r]&&(n[r]=this.shape[r]);return new pn({...this._def,shape:()=>n})}omit(t){const n={};for(const r of At.objectKeys(this.shape))t[r]||(n[r]=this.shape[r]);return new pn({...this._def,shape:()=>n})}deepPartial(){return Ms(this)}partial(t){const n={};for(const r of At.objectKeys(this.shape)){const o=this.shape[r];t&&!t[r]?n[r]=o:n[r]=o.optional()}return new pn({...this._def,shape:()=>n})}required(t){const n={};for(const r of At.objectKeys(this.shape))if(t&&!t[r])n[r]=this.shape[r];else{let s=this.shape[r];for(;s instanceof oo;)s=s._def.innerType;n[r]=s}return new pn({...this._def,shape:()=>n})}keyof(){return By(At.objectKeys(this.shape))}}pn.create=(e,t)=>new pn({shape:()=>e,unknownKeys:"strip",catchall:Po.create(),typeName:Ye.ZodObject,...rt(t)}),pn.strictCreate=(e,t)=>new pn({shape:()=>e,unknownKeys:"strict",catchall:Po.create(),typeName:Ye.ZodObject,...rt(t)}),pn.lazycreate=(e,t)=>new pn({shape:e,unknownKeys:"strip",catchall:Po.create(),typeName:Ye.ZodObject,...rt(t)});class od extends gt{_parse(t){const{ctx:n}=this._processInputParams(t),r=this._def.options;function o(s){for(const c of s)if(c.result.status==="valid")return c.result;for(const c of s)if(c.result.status==="dirty")return n.common.issues.push(...c.ctx.common.issues),c.result;const u=s.map(c=>new ro(c.ctx.common.issues));return we(n,{code:ge.invalid_union,unionErrors:u}),Ge}if(n.common.async)return Promise.all(r.map(async s=>{const u={...n,common:{...n.common,issues:[]},parent:null};return{result:await s._parseAsync({data:n.data,path:n.path,parent:u}),ctx:u}})).then(o);{let s;const u=[];for(const d of r){const p={...n,common:{...n.common,issues:[]},parent:null},m=d._parseSync({data:n.data,path:n.path,parent:p});if(m.status==="valid")return m;m.status==="dirty"&&!s&&(s={result:m,ctx:p}),p.common.issues.length&&u.push(p.common.issues)}if(s)return n.common.issues.push(...s.ctx.common.issues),s.result;const c=u.map(d=>new ro(d));return we(n,{code:ge.invalid_union,unionErrors:c}),Ge}}get options(){return this._def.options}}od.create=(e,t)=>new od({options:e,typeName:Ye.ZodUnion,...rt(t)});const ao=e=>e instanceof Ih?ao(e.schema):e instanceof ji?ao(e.innerType()):e instanceof sd?[e.value]:e instanceof Ti?e.options:e instanceof Uh?At.objectValues(e.enum):e instanceof ld?ao(e._def.innerType):e instanceof Ph?[void 0]:e instanceof zh?[null]:e instanceof oo?[void 0,...ao(e.unwrap())]:e instanceof Pi?[null,...ao(e.unwrap())]:e instanceof My||e instanceof dd?ao(e.unwrap()):e instanceof cd?ao(e._def.innerType):[];class Lh extends gt{_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==Be.object)return we(n,{code:ge.invalid_type,expected:Be.object,received:n.parsedType}),Ge;const r=this.discriminator,o=n.data[r],s=this.optionsMap.get(o);return s?n.common.async?s._parseAsync({data:n.data,path:n.path,parent:n}):s._parseSync({data:n.data,path:n.path,parent:n}):(we(n,{code:ge.invalid_union_discriminator,options:Array.from(this.optionsMap.keys()),path:[r]}),Ge)}get discriminator(){return this._def.discriminator}get options(){return this._def.options}get optionsMap(){return this._def.optionsMap}static create(t,n,r){const o=new Map;for(const s of n){const u=ao(s.shape[t]);if(!u.length)throw new Error(`A discriminator value for key \`${t}\` could not be extracted from all schema options`);for(const c of u){if(o.has(c))throw new Error(`Discriminator property ${String(t)} has duplicate value ${String(c)}`);o.set(c,s)}}return new Lh({typeName:Ye.ZodDiscriminatedUnion,discriminator:t,options:n,optionsMap:o,...rt(r)})}}function Oh(e,t){const n=No(e),r=No(t);if(e===t)return{valid:!0,data:e};if(n===Be.object&&r===Be.object){const o=At.objectKeys(t),s=At.objectKeys(e).filter(c=>o.indexOf(c)!==-1),u={...e,...t};for(const c of s){const d=Oh(e[c],t[c]);if(!d.valid)return{valid:!1};u[c]=d.data}return{valid:!0,data:u}}else if(n===Be.array&&r===Be.array){if(e.length!==t.length)return{valid:!1};const o=[];for(let s=0;s{if(by(s)||by(u))return Ge;const c=Oh(s.value,u.value);return c.valid?((xy(s)||xy(u))&&n.dirty(),{status:n.value,value:c.data}):(we(r,{code:ge.invalid_intersection_types}),Ge)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([s,u])=>o(s,u)):o(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}}id.create=(e,t,n)=>new id({left:e,right:t,typeName:Ye.ZodIntersection,...rt(n)});class Ni extends gt{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==Be.array)return we(r,{code:ge.invalid_type,expected:Be.array,received:r.parsedType}),Ge;if(r.data.lengththis._def.items.length&&(we(r,{code:ge.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),n.dirty());const s=[...r.data].map((u,c)=>{const d=this._def.items[c]||this._def.rest;return d?d._parse(new To(r,u,r.path,c)):null}).filter(u=>!!u);return r.common.async?Promise.all(s).then(u=>Ar.mergeArray(n,u)):Ar.mergeArray(n,s)}get items(){return this._def.items}rest(t){return new Ni({...this._def,rest:t})}}Ni.create=(e,t)=>{if(!Array.isArray(e))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new Ni({items:e,typeName:Ye.ZodTuple,rest:null,...rt(t)})};class Ry extends gt{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==Be.map)return we(r,{code:ge.invalid_type,expected:Be.map,received:r.parsedType}),Ge;const o=this._def.keyType,s=this._def.valueType,u=[...r.data.entries()].map(([c,d],p)=>({key:o._parse(new To(r,c,r.path,[p,"key"])),value:s._parse(new To(r,d,r.path,[p,"value"]))}));if(r.common.async){const c=new Map;return Promise.resolve().then(async()=>{for(const d of u){const p=await d.key,m=await d.value;if(p.status==="aborted"||m.status==="aborted")return Ge;(p.status==="dirty"||m.status==="dirty")&&n.dirty(),c.set(p.value,m.value)}return{status:n.value,value:c}})}else{const c=new Map;for(const d of u){const p=d.key,m=d.value;if(p.status==="aborted"||m.status==="aborted")return Ge;(p.status==="dirty"||m.status==="dirty")&&n.dirty(),c.set(p.value,m.value)}return{status:n.value,value:c}}}}Ry.create=(e,t,n)=>new Ry({valueType:t,keyType:e,typeName:Ye.ZodMap,...rt(n)});class yl extends gt{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.parsedType!==Be.set)return we(r,{code:ge.invalid_type,expected:Be.set,received:r.parsedType}),Ge;const o=this._def;o.minSize!==null&&r.data.sizeo.maxSize.value&&(we(r,{code:ge.too_big,maximum:o.maxSize.value,type:"set",inclusive:!0,exact:!1,message:o.maxSize.message}),n.dirty());const s=this._def.valueType;function u(d){const p=new Set;for(const m of d){if(m.status==="aborted")return Ge;m.status==="dirty"&&n.dirty(),p.add(m.value)}return{status:n.value,value:p}}const c=[...r.data.values()].map((d,p)=>s._parse(new To(r,d,r.path,p)));return r.common.async?Promise.all(c).then(d=>u(d)):u(c)}min(t,n){return new yl({...this._def,minSize:{value:t,message:Me.toString(n)}})}max(t,n){return new yl({...this._def,maxSize:{value:t,message:Me.toString(n)}})}size(t,n){return this.min(t,n).max(t,n)}nonempty(t){return this.min(1,t)}}yl.create=(e,t)=>new yl({valueType:e,minSize:null,maxSize:null,typeName:Ye.ZodSet,...rt(t)});class Ih extends gt{get schema(){return this._def.getter()}_parse(t){const{ctx:n}=this._processInputParams(t);return this._def.getter()._parse({data:n.data,path:n.path,parent:n})}}Ih.create=(e,t)=>new Ih({getter:e,typeName:Ye.ZodLazy,...rt(t)});class sd extends gt{_parse(t){if(t.data!==this._def.value){const n=this._getOrReturnCtx(t);return we(n,{received:n.data,code:ge.invalid_literal,expected:this._def.value}),Ge}return{status:"valid",value:t.data}}get value(){return this._def.value}}sd.create=(e,t)=>new sd({value:e,typeName:Ye.ZodLiteral,...rt(t)});function By(e,t){return new Ti({values:e,typeName:Ye.ZodEnum,...rt(t)})}class Ti extends gt{_parse(t){if(typeof t.data!="string"){const n=this._getOrReturnCtx(t),r=this._def.values;return we(n,{expected:At.joinValues(r),received:n.parsedType,code:ge.invalid_type}),Ge}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(t.data)){const n=this._getOrReturnCtx(t),r=this._def.values;return we(n,{received:n.data,code:ge.invalid_enum_value,options:r}),Ge}return Xr(t.data)}get options(){return this._def.values}get enum(){const t={};for(const n of this._def.values)t[n]=n;return t}get Values(){const t={};for(const n of this._def.values)t[n]=n;return t}get Enum(){const t={};for(const n of this._def.values)t[n]=n;return t}extract(t,n=this._def){return Ti.create(t,{...this._def,...n})}exclude(t,n=this._def){return Ti.create(this.options.filter(r=>!t.includes(r)),{...this._def,...n})}}Ti.create=By;class Uh extends gt{_parse(t){const n=At.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(t);if(r.parsedType!==Be.string&&r.parsedType!==Be.number){const o=At.objectValues(n);return we(r,{expected:At.joinValues(o),received:r.parsedType,code:ge.invalid_type}),Ge}if(this._cache||(this._cache=new Set(At.getValidEnumValues(this._def.values))),!this._cache.has(t.data)){const o=At.objectValues(n);return we(r,{received:r.data,code:ge.invalid_enum_value,options:o}),Ge}return Xr(t.data)}get enum(){return this._def.values}}Uh.create=(e,t)=>new Uh({values:e,typeName:Ye.ZodNativeEnum,...rt(t)});class ud extends gt{unwrap(){return this._def.type}_parse(t){const{ctx:n}=this._processInputParams(t);if(n.parsedType!==Be.promise&&n.common.async===!1)return we(n,{code:ge.invalid_type,expected:Be.promise,received:n.parsedType}),Ge;const r=n.parsedType===Be.promise?n.data:Promise.resolve(n.data);return Xr(r.then(o=>this._def.type.parseAsync(o,{path:n.path,errorMap:n.common.contextualErrorMap})))}}ud.create=(e,t)=>new ud({type:e,typeName:Ye.ZodPromise,...rt(t)});class ji extends gt{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===Ye.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(t){const{status:n,ctx:r}=this._processInputParams(t),o=this._def.effect||null,s={addIssue:u=>{we(r,u),u.fatal?n.abort():n.dirty()},get path(){return r.path}};if(s.addIssue=s.addIssue.bind(s),o.type==="preprocess"){const u=o.transform(r.data,s);if(r.common.async)return Promise.resolve(u).then(async c=>{if(n.value==="aborted")return Ge;const d=await this._def.schema._parseAsync({data:c,path:r.path,parent:r});return d.status==="aborted"?Ge:d.status==="dirty"||n.value==="dirty"?vl(d.value):d});{if(n.value==="aborted")return Ge;const c=this._def.schema._parseSync({data:u,path:r.path,parent:r});return c.status==="aborted"?Ge:c.status==="dirty"||n.value==="dirty"?vl(c.value):c}}if(o.type==="refinement"){const u=c=>{const d=o.refinement(c,s);if(r.common.async)return Promise.resolve(d);if(d instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return c};if(r.common.async===!1){const c=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return c.status==="aborted"?Ge:(c.status==="dirty"&&n.dirty(),u(c.value),{status:n.value,value:c.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(c=>c.status==="aborted"?Ge:(c.status==="dirty"&&n.dirty(),u(c.value).then(()=>({status:n.value,value:c.value}))))}if(o.type==="transform")if(r.common.async===!1){const u=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!Bs(u))return Ge;const c=o.transform(u.value,s);if(c instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:n.value,value:c}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(u=>Bs(u)?Promise.resolve(o.transform(u.value,s)).then(c=>({status:n.value,value:c})):Ge);At.assertNever(o)}}ji.create=(e,t,n)=>new ji({schema:e,typeName:Ye.ZodEffects,effect:t,...rt(n)}),ji.createWithPreprocess=(e,t,n)=>new ji({schema:t,effect:{type:"preprocess",transform:e},typeName:Ye.ZodEffects,...rt(n)});class oo extends gt{_parse(t){return this._getType(t)===Be.undefined?Xr(void 0):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}oo.create=(e,t)=>new oo({innerType:e,typeName:Ye.ZodOptional,...rt(t)});class Pi extends gt{_parse(t){return this._getType(t)===Be.null?Xr(null):this._def.innerType._parse(t)}unwrap(){return this._def.innerType}}Pi.create=(e,t)=>new Pi({innerType:e,typeName:Ye.ZodNullable,...rt(t)});class ld extends gt{_parse(t){const{ctx:n}=this._processInputParams(t);let r=n.data;return n.parsedType===Be.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:n.path,parent:n})}removeDefault(){return this._def.innerType}}ld.create=(e,t)=>new ld({innerType:e,typeName:Ye.ZodDefault,defaultValue:typeof t.default=="function"?t.default:()=>t.default,...rt(t)});class cd extends gt{_parse(t){const{ctx:n}=this._processInputParams(t),r={...n,common:{...n.common,issues:[]}},o=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return rd(o)?o.then(s=>({status:"valid",value:s.status==="valid"?s.value:this._def.catchValue({get error(){return new ro(r.common.issues)},input:r.data})})):{status:"valid",value:o.status==="valid"?o.value:this._def.catchValue({get error(){return new ro(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}cd.create=(e,t)=>new cd({innerType:e,typeName:Ye.ZodCatch,catchValue:typeof t.catch=="function"?t.catch:()=>t.catch,...rt(t)});class ky extends gt{_parse(t){if(this._getType(t)!==Be.nan){const r=this._getOrReturnCtx(t);return we(r,{code:ge.invalid_type,expected:Be.nan,received:r.parsedType}),Ge}return{status:"valid",value:t.data}}}ky.create=e=>new ky({typeName:Ye.ZodNaN,...rt(e)});class My extends gt{_parse(t){const{ctx:n}=this._processInputParams(t),r=n.data;return this._def.type._parse({data:r,path:n.path,parent:n})}unwrap(){return this._def.type}}class Vh extends gt{_parse(t){const{status:n,ctx:r}=this._processInputParams(t);if(r.common.async)return(async()=>{const s=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return s.status==="aborted"?Ge:s.status==="dirty"?(n.dirty(),vl(s.value)):this._def.out._parseAsync({data:s.value,path:r.path,parent:r})})();{const o=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?Ge:o.status==="dirty"?(n.dirty(),{status:"dirty",value:o.value}):this._def.out._parseSync({data:o.value,path:r.path,parent:r})}}static create(t,n){return new Vh({in:t,out:n,typeName:Ye.ZodPipeline})}}class dd extends gt{_parse(t){const n=this._def.innerType._parse(t),r=o=>(Bs(o)&&(o.value=Object.freeze(o.value)),o);return rd(n)?n.then(o=>r(o)):r(n)}unwrap(){return this._def.innerType}}dd.create=(e,t)=>new dd({innerType:e,typeName:Ye.ZodReadonly,...rt(t)});var Ye;(function(e){e.ZodString="ZodString",e.ZodNumber="ZodNumber",e.ZodNaN="ZodNaN",e.ZodBigInt="ZodBigInt",e.ZodBoolean="ZodBoolean",e.ZodDate="ZodDate",e.ZodSymbol="ZodSymbol",e.ZodUndefined="ZodUndefined",e.ZodNull="ZodNull",e.ZodAny="ZodAny",e.ZodUnknown="ZodUnknown",e.ZodNever="ZodNever",e.ZodVoid="ZodVoid",e.ZodArray="ZodArray",e.ZodObject="ZodObject",e.ZodUnion="ZodUnion",e.ZodDiscriminatedUnion="ZodDiscriminatedUnion",e.ZodIntersection="ZodIntersection",e.ZodTuple="ZodTuple",e.ZodRecord="ZodRecord",e.ZodMap="ZodMap",e.ZodSet="ZodSet",e.ZodFunction="ZodFunction",e.ZodLazy="ZodLazy",e.ZodLiteral="ZodLiteral",e.ZodEnum="ZodEnum",e.ZodEffects="ZodEffects",e.ZodNativeEnum="ZodNativeEnum",e.ZodOptional="ZodOptional",e.ZodNullable="ZodNullable",e.ZodDefault="ZodDefault",e.ZodCatch="ZodCatch",e.ZodPromise="ZodPromise",e.ZodBranded="ZodBranded",e.ZodPipeline="ZodPipeline",e.ZodReadonly="ZodReadonly"})(Ye||(Ye={}));const tt=jo.create,Hh=ks.create,Wn=jh.create;Po.create;const fd=Ma.create,Rt=pn.create;od.create;const Qh=Lh.create;id.create,Ni.create;const Ns=sd.create,NR=Ti.create;ud.create,oo.create,Pi.create;var TR=G9({"./translations/en-US.json":()=>Promise.resolve().then(()=>bV),"./translations/fr.json":()=>Promise.resolve().then(()=>_V),"./translations/ja.json":()=>Promise.resolve().then(()=>wV)}),Rn={VAR_REGEX:/\${(\w+)}/g,COMPONENT_REGEX:/<(\w+)>(.*?)<\/\1>/g,getNestedValue(e,t){let n=e,r=t.split(".");for(let o of r){if(n===null||typeof n!="object"||Array.isArray(n)||!Object.prototype.hasOwnProperty.call(n,o))return;n=n[o]}return n},substitute(e,t){return!t||!e.includes("${")?e:(Rn.VAR_REGEX.lastIndex=0,e.replace(Rn.VAR_REGEX,(n,r)=>String(t[r]??"")))},parseComponents(e,t){if(!t||!e.includes("<"))return[e];let n=[],r=0;Rn.COMPONENT_REGEX.lastIndex=0;let o;for(;(o=Rn.COMPONENT_REGEX.exec(e))!==null;){let[s,u,c]=o,d=o.index;d>r&&n.push(e.slice(r,d));let p=t?t[u]:void 0;p?typeof p=="function"?n.push(p(c)):n.push(p):n.push(c),r=d+s.length}return r{let{components:c,vars:d,fallback:p}=u,m=r(s,d,p);return Rn.parseComponents(m,c)},o},createTranslator(e,t,n){let r=`${e}.`,o=n&&Object.keys(n).length>0;return(s,u,c)=>{let d=r+s;if(o){let m=Rn.getNestedValue(n,s);if(m!==void 0)return Rn.substitute(String(m),u)}if(!t)return c||`${r}${s}`;let p=t?Rn.getNestedValue(t,d):void 0;return p!==void 0?Rn.substitute(String(p),u):c||(t?s:`${r}${s}`)}},async loadTranslations(e,t){if(t?.has(e))return t.get(e);try{let n=await TR(`./translations/${e}.json`),r=n.default??n;return t&&t.set(e,r),r}catch{return t&&t.set(e,null),null}},async loadTranslationsWithFallback(e,t,n){let r=await Rn.loadTranslations(e,n);return r||t&&t!==e&&(r=await Rn.loadTranslations(t,n),r)?r:e!=="en-US"&&t!=="en-US"?Rn.loadTranslations("en-US",n):null}};async function jR(e={}){let t=e.currentLanguage??"en-US",n=e.fallbackLanguage??"en-US",r=new Map,o=await Rn.loadTranslationsWithFallback(t,n,r),s=t,u=n,c=o;return{get currentLanguage(){return s},get fallbackLanguage(){return u},get translator(){return(d,p)=>Rn.createEnhancedTranslator(d,c,p)},get commonTranslator(){return Rn.createEnhancedTranslator("common",c)},getCurrentTranslations(){return c},async changeLanguage(d,p){try{s=d,u=p??u,c=await Rn.loadTranslationsWithFallback(s,u,r)}catch(m){throw new Error(`Failed to change language to '${d}': ${m instanceof Error?m.message:"Unknown error"}`)}}}}var PR={INSUFFICIENT_SCOPE:"A0E-403-0002"};function zR(e){return typeof e=="object"&&e!==null&&e.name==="ApiError"&&typeof e.message=="string"&&typeof e.status=="number"}function zi(e){return typeof e=="object"&&e!==null&&"body"in e&&typeof e.body=="object"&&e.body!==null}function hd(e,t){if(typeof e=="string")return new Error(e);if(e instanceof Error)return e;if(zR(e)){let n=e.data?.error;if(typeof n=="string"&&t?.resolver){let r=t.resolver(n);if(r)return new Error(r)}return new Error(e.message??t?.fallbackMessage??"Unknown API error")}return new Error(t?.fallbackMessage??"An unknown error occurred")}function Ts(e){return typeof e=="object"&&e!==null?[e.status,e.statusCode,e.response?.status,e.body?.status].find(t=>typeof t=="number"):void 0}var fa=class h9 extends Error{type="BusinessError";constructor(t){super(t.message),this.name="BusinessError",Error.captureStackTrace&&Error.captureStackTrace(this,h9)}},LR="mfa_required";function OR(e){return!e||typeof e!="object"?!1:e.error===LR}function bl(e){let t=e&&typeof e=="object"?e:null;return[t,t?.body,t?.cause].some(OR)}function Gh(e){if(!e||bl(e))return!1;let t=Ts(e);return!(t&&t>=500)}function IR(e,t){return zi(e)&&e.body?.detail?e.body.detail:e instanceof Error?e.message:typeof e=="string"?e:t}var UR=(e=>(e.ContentType="Content-Type",e.Authorization="Authorization",e.Auth0Scope="auth0-scope",e))(UR||{}),VR=(e=>(e.JSON="application/json",e))(VR||{});function HR(e){return e.mode==="proxy"?QR(e.proxyUrl):e.contextInterface.mfa}function QR(e){let t=async(r,o)=>{let s=o?`?${new URLSearchParams(o)}`:"",u=await fetch(`${e}${r}${s}`);if(!u.ok)throw await u.json().catch(()=>({status:u.status}));return u.json()},n=async(r,o)=>{let s=await fetch(`${e}${r}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o)});if(!s.ok)throw await s.json().catch(()=>({status:s.status}));return s.json()};return{getAuthenticators:r=>t("/auth/mfa/authenticators",{mfa_token:r}),enroll:r=>n("/auth/mfa/enroll",{mfaToken:r.mfaToken,authenticatorTypes:[r.factorType],..."phoneNumber"in r&&{phoneNumber:r.phoneNumber},..."email"in r&&r.email&&{email:r.email}}),challenge:r=>n("/auth/mfa/challenge",{mfaToken:r.mfaToken,challengeType:r.challengeType,authenticatorId:r.authenticatorId}),verify:r=>n("/auth/mfa/verify",r)}}function Ny(e){return async(t,n,r)=>{let o=new Headers(n?.headers);return o.set("Content-Type","application/json"),r?.scope?.length&&o.set("auth0-scope",r.scope.join(" ")),e?e(t,{...n,headers:o},r):fetch(t,{...n,headers:o})}}function Ty(e,t){let n=e.contextInterface.createFetcher({dpopNonceId:t});return(r,o,s)=>{let u=new Headers(o?.headers);return u.set("Content-Type","application/json"),n.fetchWithAuth(r,{...o,headers:u},{scope:s?.scope,audience:s?.audience})}}var GR="me",YR="__auth0_my_account_api__";function KR(e){return e.mode==="proxy"?new KA({domain:e.domain??"",baseUrl:new URL(GR,e.proxyUrl).href,telemetry:!1,fetcher:Ny(e.fetcher)}):new KA({domain:e.domain,telemetry:!1,fetcher:Ty(e,YR)})}var qR="my-org",ZR="__auth0_my_organization_api__";function WR(e){return e.mode==="proxy"?new gy({domain:e.domain??"",baseUrl:new URL(qR,e.proxyUrl).href,telemetry:!1,fetcher:Ny(e.fetcher)}):new gy({domain:e.domain,telemetry:!1,fetcher:Ty(e,ZR)})}function jy(e){return e.replace(/\/*$/,"/")}function XR(e){try{let t=new URL(e).href;return jy(t)}catch{let t=new URL(e,window.location.origin).href;return jy(t)}}var $R={resolveAuthConfig(e){if(e.authProxyUrl)return{mode:"proxy",proxyUrl:XR(e.authProxyUrl),...e.domain&&{domain:e.domain.trim()},...e.fetcher&&{fetcher:e.fetcher}};let{contextInterface:t}=e;if(!t)throw new Error("Initialization failed: Auth0 context not found. Ensure the component is rendered within Auth0ComponentProvider.");let n=e.domain??t.getConfiguration()?.domain;if(!n)throw new Error("Initialization failed: Auth0 domain is not configured. Provide a domain to Auth0ComponentProvider.");return{mode:"spa",contextInterface:t,domain:n.trim()}}};async function JR(e,t){let n=await jR(t||{currentLanguage:"en-US",fallbackLanguage:"en-US"});if(e.previewMode)return{auth:{},i18nService:n,isProxyMode(){return!1},myAccountApiClient:void 0,myOrganizationApiClient:void 0,getMyAccountApiClient:function(){throw new Error("Function not implemented.")},getMyOrganizationApiClient:function(){throw new Error("Function not implemented.")},getMFAStepUpApiClient:function(){throw new Error("Function not implemented.")},getDomain:function(){}};let r=$R.resolveAuthConfig(e),o=WR(r),s=KR(r),u=HR(r);return{auth:e,i18nService:n,myAccountApiClient:s,myOrganizationApiClient:o,isProxyMode:()=>r.mode==="proxy",getDomain:()=>r.domain,getMyAccountApiClient:()=>{if(!s)throw new Error("myAccountApiClient is not enabled. Please use it within Auth0ComponentProvider.");return s},getMyOrganizationApiClient:()=>{if(!o)throw new Error("myOrganizationApiClient is not enabled. Please ensure you are in an Auth0 Organization context.");return o},getMFAStepUpApiClient:()=>u}}var Py=(e,t)=>Rt({contact:t?tt().regex(t,{message:e||"Please enter a valid email address"}):tt().email({message:e||"Please enter a valid email address"})});Py();var e7=/^\+?[0-9\s\-()]{8,25}$/,zy=(e,t)=>Rt({contact:tt().regex(t||e7,{message:e||"Please enter a valid phone number"})});zy();var Yh=(e={})=>{let{required:t=!0,regex:n,minLength:r,maxLength:o,errorMessage:s}=e,u=tt();if(t){let c=r&&r>0?r:1;return u=u.min(c,s||`Minimum ${c} characters required`),o&&(u=u.max(o,`Maximum ${o} characters allowed`)),n&&(u=u.regex(n,s||"Invalid format")),u}return tt().optional().refine(c=>c?!(r&&c.lengtho||n&&!n.test(c)):!0,{message:s||"Invalid format"})},t7=(e={})=>{let{required:t=!1,regex:n,errorMessage:r}=e,o=r||"Please enter a valid HTTP";if(n)return t?tt().min(1,o).regex(n,o):tt().optional().refine(u=>!u||n.test(u),{message:o});let s=u=>{let c=tt().url().safeParse(u).success,d=u.startsWith("http://")||u.startsWith("https://");return c&&d};return t?tt().min(1,o).refine(s,{message:o}):tt().optional().refine(u=>!u||s(u),{message:o})},Ly=/^(?:https?:\/\/)?(?:[\w-]+\.)*[\w-]+(?:\.\w{2,})?(?::\d{1,5})?(?:\/[\w\-./?%&=]*)?$/i,n7=(e={})=>{let{required:t=!0,regex:n,errorMessage:r}=e,o=r||"Please enter a valid domain (e.g., example.com or https://example.com)";return n?t?tt().min(1,o).regex(n,o):tt().optional().refine(s=>!s||n.test(s),{message:o}):t?tt().min(1,o).regex(Ly,o):tt().optional().refine(s=>!s||Ly.test(s),{message:o})},Oy=(e={})=>{let t=Wn({errorMap:()=>({message:e.errorMessage||"Invalid boolean value"})});return e.required===!1?t.optional():t},ot={domain:{defaultError:"Please enter a valid domain",regex:void 0},client_id:{defaultError:"Please enter a valid client ID",regex:void 0},client_secret:{defaultError:"Please enter a valid client secret",regex:void 0},icon_url:{defaultError:"Please enter a valid URL",regex:/^https?:\/\/.+/},callback_url:{defaultError:"Please enter a valid URL",regex:/^https?:\/\/.+/},url:{defaultError:"Please enter a valid URL",regex:/^https?:\/\/.+/},certificate:{defaultError:"Please enter a valid certificate",regex:void 0},algorithm:{defaultError:"Please enter a valid algorithm",regex:void 0},metadata:{defaultError:"Please enter valid metadata",regex:void 0},userIdAttribute:{defaultError:"Please enter a valid user ID attribute",regex:/^[a-zA-Z_][a-zA-Z0-9_]*$/}},it=(e,t={},n)=>Yh({required:t.required??!1,regex:t.regex??e.regex??void 0,errorMessage:t.errorMessage??n??e.defaultError,minLength:t.minLength,maxLength:t.maxLength}),r7=/^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/,a7=/^(?!.*\.\.)[a-zA-Z0-9\u00C0-\u024F\u1E00-\u1EFF\s\-_.']+$/,Iy=(e={})=>{let{name:t={},displayName:n={},primaryColor:r={},logoURL:o={},backgroundColor:s={}}=e,u=/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/,c="Invalid color format",d=r.regex||u,p=r.errorMessage||c,m=s.regex||u,g=s.errorMessage||c;return Rt({name:Yh({required:!0,regex:t.regex??r7,errorMessage:t.errorMessage,minLength:t.minLength,maxLength:t.maxLength}),display_name:Yh({required:n.required??!0,regex:n.regex??a7,errorMessage:n.errorMessage,minLength:n.minLength,maxLength:n.maxLength}),branding:Rt({logo_url:t7({required:!1,regex:o.regex,errorMessage:o.errorMessage}),colors:Rt({primary:tt().regex(d,p),page_background:tt().regex(m,g)})})})};Iy();var rr="email",js="phone",Ps="push-notification",zs="totp",xl="recovery-code",Kh="webauthn-roaming",qh="webauthn-platform";function o7(e,t={}){switch(e){case rr:if(!t.email)throw new Error("Email is required for email enrollment");return{type:rr,email:t.email};case js:if(!t.phone_number)throw new Error("Phone number is required for SMS enrollment");return{type:js,phone_number:t.phone_number};case zs:return{type:zs};case Kh:return{type:Kh};case qh:return{type:qh};case xl:return{type:xl};case Ps:return{type:Ps};default:throw new Error(`Unsupported factor type: ${e}`)}}function i7(e,t){switch(e){case js:return"phone_number"in t&&typeof t.phone_number=="string"&&t.phone_number||"SMS";case rr:return"email"in t&&typeof t.email=="string"&&t.email||"Email";case xl:return t.id&&t.id.includes("|")?t.id.split("|")[1]??"Recovery Codes":"Recovery Codes";case zs:return t.id&&t.id.includes("|")?t.id.split("|")[1]??"Authenticator App":"Authenticator App";default:return"name"in t&&t.name?t.name:e}}function Zh(e,t,n,r,o){return{id:t,type:e,enrolled:n,name:o?i7(e,o):e,created_at:r}}function s7(e,t,n){let r={},o=t.authentication_methods.filter(u=>!("confirmed"in u)||u.confirmed!==!1);if(n){for(let u of o){let c=u.type;r[c]||(r[c]=[]),r[c].push(Zh(c,u.id,!0,u.created_at,u))}return r}let s=new Map;for(let u of o){let c=u.type;s.has(c)||s.set(c,[]),s.get(c).push(u)}for(let u of e.factors){let c=u.type;if([qh,Kh].includes(c))continue;r[c]||(r[c]=[]);let d=s.get(c)||[];if(d.length>0)for(let p of d)r[c].push(Zh(c,p.id,!0,p.created_at,p));else r[c].push(Zh(c,`placeholder-${c}`,!1,null))}return r}var Wh={fromAPI(e,t,n=!1){return s7(e,t,n)},buildEnrollParams(e,t={}){return o7(e,t)},buildConfirmEnrollmentParams(e,t,n){let r={auth_session:t};return["totp","phone","email"].includes(e)&&n.userOtpCode?.trim()?{...r,otp_code:n.userOtpCode.trim()}:r}},md={UL_PRIMARY:"#0059d6",UL_PAGE_BG:"#000000"},Xh={create:()=>({id:"",name:"",display_name:"",branding:{logo_url:"",colors:{primary:md.UL_PRIMARY,page_background:md.UL_PAGE_BG}}})},Ls={fromAPI(e){return{id:e.id||"",name:e.name||"",display_name:e.display_name||"",branding:{logo_url:e.branding?.logo_url||"",colors:{primary:e.branding?.colors?.primary||md.UL_PRIMARY,page_background:e.branding?.colors?.page_background||md.UL_PAGE_BG}}}},toAPI(e){let t=e.branding.logo_url!==void 0&&e.branding.logo_url!==""&&e.branding.logo_url.trim()!=="",n={name:e.name,display_name:e.display_name,branding:{colors:{primary:e.branding.colors.primary,page_background:e.branding.colors.page_background}}};return t&&(n.branding.logo_url=e.branding.logo_url),n}},St={ADFS:"adfs",GOOGLE_APPS:"google-apps",OIDC:"oidc",OKTA:"okta",PINGFEDERATE:"pingfederate",SAMLP:"samlp",WAAD:"waad"},$h=Object.values(St),Jh={[St.ADFS]:"ADFS",[St.GOOGLE_APPS]:"Google Workspace",[St.OIDC]:"Custom OIDC",[St.OKTA]:"Okta",[St.PINGFEDERATE]:"PingFederate",[St.SAMLP]:"Custom SAML",[St.WAAD]:"Entra ID"},u7={[St.OKTA]:["domain","client_id","client_secret","icon_url"],[St.ADFS]:["adfs_server","fedMetadataXml"],[St.GOOGLE_APPS]:["domain","client_id","client_secret","icon_url"],[St.OIDC]:["type","client_id","client_secret","discovery_url"],[St.PINGFEDERATE]:["pingFederateBaseUrl","signatureAlgorithm","digestAlgorithm","signSAMLRequest","metadataUrl","cert","signingCert","idpInitiated","icon_url"],[St.SAMLP]:["signatureAlgorithm","digestAlgorithm","protocolBinding","signSAMLRequest","bindingMethod","metadataUrl","cert","idpInitiated","icon_url"],[St.WAAD]:["tenant_domain","client_id","client_secret","icon_url"]},Uy=(e,t)=>{let n=o=>o!=null&&o!=="",r=u7[e];if(!r)throw new Error(`Unsupported identity provider strategy: ${e}`);return Object.fromEntries(Object.entries(t).filter(([o,s])=>r.includes(o)&&n(s)))},em={createToAPI(e){let{strategy:t,name:n,display_name:r,options:o}=e;if(!n||n.trim()==="")throw new Error("Provider name is required");return{strategy:t,name:n.trim(),display_name:r,options:Uy(t,o)}},updateToAPI(e){let{strategy:t,display_name:n,is_enabled:r,show_as_button:o,assign_membership_on_login:s,...u}=e,c={};if(n!==void 0&&(c.display_name=n),r!==void 0&&(c.is_enabled=r),o!==void 0&&(c.show_as_button=o),s!==void 0&&(c.assign_membership_on_login=s),t&&Object.keys(u).length>0){let d=Uy(t,u);Object.keys(d).length>0&&(c.options=d)}return c}},l7={okta:(e={})=>Rt({domain:it(ot.domain,{...e.domain,required:!0},"Please enter a valid Okta domain"),client_id:it(ot.client_id,{...e.client_id,required:!0}),client_secret:it(ot.client_secret,{...e.client_secret,required:!0}),icon_url:it(ot.icon_url,{...e.icon_url,required:!1}),callback_url:it(ot.callback_url,{...e.callback_url,required:!1}),show_as_button:Wn().optional(),assign_membership_on_login:Wn().optional()}),adfs:(e={})=>Qh("meta_data_source",[Rt({meta_data_source:Ns("meta_data_url"),adfs_server:it(ot.url,{...e.adfs_server,required:!0},"Please enter a valid ADFS server URL"),meta_data_location_url:it(ot.url,e.meta_data_location_url,"Please enter a valid metadata location URL"),fedMetadataXml:tt().optional()}),Rt({meta_data_source:Ns("meta_data_file"),fedMetadataXml:it(ot.metadata,{...e.fedMetadataXml,required:!0},"Please provide a Federation Metadata XML file"),adfs_server:tt().optional(),meta_data_location_url:tt().optional()})]),"google-apps":(e={})=>Rt({domain:it(ot.domain,{...e.domain,required:!0},"Please enter a valid Google Workspace domain"),client_id:it(ot.client_id,{...e.client_id,required:!0}),client_secret:it(ot.client_secret,{...e.client_secret,required:!0}),icon_url:it(ot.icon_url,{...e.icon_url,required:!1}),callback_url:it(ot.callback_url,{...e.callback_url,required:!1}),show_as_button:Wn().optional(),assign_membership_on_login:Wn().optional()}),oidc:(e={})=>{let t={client_id:it(ot.client_id,{...e.client_id,required:!0}),discovery_url:it(ot.url,{...e.discovery_url,required:!0},"Please enter a valid discovery URL"),show_as_button:Wn().optional(),assign_membership_on_login:Wn().optional()};return Qh("type",[Rt({type:Ns("back_channel"),client_secret:it(ot.client_secret,{...e.client_secret,required:!0}),...t}),Rt({type:Ns("front_channel"),client_secret:it(ot.client_secret,{...e.client_secret,required:!1}),...t})])},pingfederate:(e={})=>Rt({pingFederateBaseUrl:it(ot.url,{...e.pingFederateBaseUrl,required:!0},"Please enter a valid PingFederate base URL"),signatureAlgorithm:it(ot.algorithm,{...e.signatureAlgorithm,required:!1},"Please enter a valid signature algorithm"),digestAlgorithm:it(ot.algorithm,{...e.digestAlgorithm,required:!1},"Please enter a valid digest algorithm"),signSAMLRequest:Oy({required:!1,errorMessage:e.signSAMLRequest?.errorMessage??"SAML request signing option is required"}),signingCert:it(ot.certificate,{...e.signingCert,required:!0},"Please enter a valid signing certificate"),cert:it(ot.certificate,{...e.cert,required:!1}),idpInitiated:Rt({enabled:Wn().optional(),client_id:tt().optional(),client_protocol:tt().optional(),client_authorizequery:tt().optional()}).optional(),icon_url:it(ot.icon_url,{...e.icon_url,required:!1}),show_as_button:Wn().optional(),assign_membership_on_login:Wn().optional()}),samlp:(e={})=>{let t={signSAMLRequest:Oy({required:!0,errorMessage:e.signSAMLRequest?.errorMessage??"SAML request signing option is required"}),bindingMethod:it(ot.algorithm,{...e.bindingMethod,required:!1},"Please enter a valid binding method"),signatureAlgorithm:it(ot.algorithm,{...e.signatureAlgorithm,required:!1},"Please enter a valid signature algorithm"),digestAlgorithm:it(ot.algorithm,{...e.digestAlgorithm,required:!1},"Please enter a valid digest algorithm"),protocolBinding:it(ot.algorithm,{...e.protocolBinding,required:!1},"Please enter a valid protocol binding"),idpInitiated:Rt({enabled:Wn().optional(),client_id:tt().optional(),client_protocol:tt().optional(),client_authorizequery:tt().optional()}).optional(),icon_url:it(ot.icon_url,{...e.icon_url,required:!1}),show_as_button:Wn().optional(),assign_membership_on_login:Wn().optional()};return Qh("meta_data_source",[Rt({meta_data_source:Ns("meta_data_url"),metadataUrl:it(ot.url,{...e.metadataUrl,required:!0},"Please enter a valid metadata URL"),cert:tt().optional(),single_sign_on_login_url:tt().optional(),...t}),Rt({meta_data_source:Ns("meta_data_file"),cert:it(ot.certificate,{...e.cert,required:!0}),single_sign_on_login_url:it(ot.url,{...e.single_sign_on_login_url,required:!1},"Please enter a valid URL"),metadataUrl:tt().optional(),...t})])},waad:(e={})=>Rt({tenant_domain:it(ot.domain,{...e.tenant_domain,required:!0},"Please enter a valid Azure AD tenant domain"),client_id:it(ot.client_id,{...e.client_id,required:!0}),client_secret:it(ot.client_secret,{...e.client_secret,required:!0}),icon_url:it(ot.icon_url,{...e.icon_url,required:!1}),callback_url:it(ot.callback_url,{...e.callback_url,required:!1}),show_as_button:Wn().optional(),assign_membership_on_login:Wn().optional()})},Vy=(e={})=>{let{strategy:t={}}=e;return Rt({strategy:NR($h,{required_error:t.errorMessage||"Please select a provider strategy",invalid_type_error:t.errorMessage||"Please select a valid provider strategy"})})},tm=(e={})=>{let{name:t={},displayName:n={}}=e;return Rt({name:tt({required_error:t.errorMessage||"Please enter a valid provider name"}).min(1,"Provider name is required").regex(t.regex||/^[a-zA-Z0-9](-[a-zA-Z0-9]|[a-zA-Z0-9])*$/,"The name of the connection. Must start and end with an alphanumeric character and can only contain alphanumeric characters and '-'. Max length 128"),display_name:tt({required_error:n.errorMessage||"Please enter a valid display name"}).min(1,"Display name is required").regex(n.regex||/.*/,n.errorMessage||"Please enter a valid display name")})};function Li(e,t={}){let n={...t[e]||{}},r=l7[e];if(!r)throw new Error(`Unsupported strategy: ${e}`);return r(n)}var c7=(e={})=>{let t=Vy(e),n=tm(e);return t.merge(n)};Vy(),tm(),c7();var Hy=(e={})=>{let{userIdAttribute:t={},scimEndpointUrl:n={}}=e;return Rt({userIdAttribute:it(ot.userIdAttribute,{...t,required:t.required??!0},t.errorMessage||"User ID attribute is required"),scimEndpointUrl:it(ot.url,{...n,required:n.required??!1},n.errorMessage||"Must be a valid URL").optional()})},d7=(e={})=>Hy(e);Hy();var f7=d7(),h7=(e,t,n)=>{let r=e?.[t];return r?{...r,errorMessage:r.errorMessage||n}:{errorMessage:n}},Qy=(e={},t="Please enter a valid domain (e.g., example.com or https://example.com)")=>{let n=h7(e,"domainUrl",t);return Rt({domain_url:n7({required:!0,...n})})};Qy();var m7=Rt({id:tt(),invitee:Rt({email:tt().email()}),inviter:Rt({name:tt().optional()}),roles:fd(tt()).optional(),created_at:tt().optional(),expires_at:tt().optional()});Rt({invitations:fd(m7),total:Hh().optional(),start:Hh().optional(),limit:Hh().optional()}),Rt({invitees:fd(Rt({email:tt().email(),roles:fd(tt()).optional()}))}),Rt({invitation_id:tt()});var p7=/^[^\s@]+@[^\s@]+\.[^\s@]+$/,g7=10,v7=(e,t,n)=>{let r=e?.[t];return r?{...r,errorMessage:r.errorMessage||n}:{errorMessage:n}},A7=(e={},t="Please enter a valid email address")=>{let n=v7(e,"email",t),r=n.regex??p7,o=n.errorMessage??t,s=e.maxEmails??g7;return{emailSchema:tt().min(1,o).regex(r,o),emailRegex:r,emailErrorMessage:o,maxEmails:s}};A7();var nm=(e={common:{},light:{},dark:{}},t=!1)=>({variables:{...e?.common||{},...t?e?.dark||{}:e?.light||{}}}),cn=(e={},t=!1)=>{let n=e.variables;return{variables:nm(n,t).variables,classes:e.classes}};function y7(e,t="light",n="default"){let r=t==="dark",{variables:o}=nm(e,r),s=document.querySelectorAll(".auth0-universal"),u=s.length>0?Array.from(s):[document.documentElement];for(let c of u){c.dataset.theme=n,r?c.classList.add("dark"):c.classList.remove("dark");for(let[d,p]of Object.entries(o))typeof p=="string"&&c.style.setProperty(d,p)}}var b7='data:image/svg+xml,%0A %0A',x7='data:image/svg+xml,%0A%0A%0A%0A%0A%0A%0A%0A%0A',_7='data:image/svg+xml,%0A Google logo%0A %0A %0A %0A %0A',C7='data:image/svg+xml,%0A %0A %0A %0A %0A',w7='data:image/svg+xml,%0A Oidc logo%0A %0A %0A %0A',E7='data:image/svg+xml,%0A %0A',S7='data:image/svg+xml,%0A PingId logo%0A %0A %0A %0A %0A %0A %0A %0A %0A %0A %0A',D7='data:image/svg+xml,%0A %0A %0A %0A %0A %0A %0A %0A %0A',F7=b7,R7=_7,B7=C7,k7=w7,M7=E7,N7=S7,T7=D7,j7=x7;function Gy(e){var t,n,r="";if(typeof e=="string"||typeof e=="number")r+=e;else if(typeof e=="object")if(Array.isArray(e)){var o=e.length;for(t=0;t{const n=new Array(e.length+t.length);for(let r=0;r({classGroupId:e,validator:t}),Ky=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),pd="-",qy=[],L7="arbitrary..",O7=e=>{const t=U7(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:u=>{if(u.startsWith("[")&&u.endsWith("]"))return I7(u);const c=u.split(pd),d=c[0]===""&&c.length>1?1:0;return Zy(c,d,t)},getConflictingClassGroupIds:(u,c)=>{if(c){const d=r[u],p=n[u];return d?p?P7(p,d):d:p||qy}return n[u]||qy}}},Zy=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;const o=e[t],s=n.nextPart.get(o);if(s){const p=Zy(e,t+1,s);if(p)return p}const u=n.validators;if(u===null)return;const c=t===0?e.join(pd):e.slice(t).join(pd),d=u.length;for(let p=0;pe.slice(1,-1).indexOf(":")===-1?void 0:(()=>{const t=e.slice(1,-1),n=t.indexOf(":"),r=t.slice(0,n);return r?L7+r:void 0})(),U7=e=>{const{theme:t,classGroups:n}=e;return V7(n,t)},V7=(e,t)=>{const n=Ky();for(const r in e){const o=e[r];rm(o,n,r,t)}return n},rm=(e,t,n,r)=>{const o=e.length;for(let s=0;s{if(typeof e=="string"){Q7(e,t,n);return}if(typeof e=="function"){G7(e,t,n,r);return}Y7(e,t,n,r)},Q7=(e,t,n)=>{const r=e===""?t:Wy(t,e);r.classGroupId=n},G7=(e,t,n,r)=>{if(K7(e)){rm(e(r),t,n,r);return}t.validators===null&&(t.validators=[]),t.validators.push(z7(n,e))},Y7=(e,t,n,r)=>{const o=Object.entries(e),s=o.length;for(let u=0;u{let n=e;const r=t.split(pd),o=r.length;for(let s=0;s"isThemeGetter"in e&&e.isThemeGetter===!0,q7=e=>{if(e<1)return{get:()=>{},set:()=>{}};let t=0,n=Object.create(null),r=Object.create(null);const o=(s,u)=>{n[s]=u,t++,t>e&&(t=0,r=n,n=Object.create(null))};return{get(s){let u=n[s];if(u!==void 0)return u;if((u=r[s])!==void 0)return o(s,u),u},set(s,u){s in n?n[s]=u:o(s,u)}}},am="!",Xy=":",Z7=[],$y=(e,t,n,r,o)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r,isExternal:o}),W7=e=>{const{prefix:t,experimentalParseClassName:n}=e;let r=o=>{const s=[];let u=0,c=0,d=0,p;const m=o.length;for(let b=0;bd?p-d:void 0;return $y(s,A,y,w)};if(t){const o=t+Xy,s=r;r=u=>u.startsWith(o)?s(u.slice(o.length)):$y(Z7,!1,u,void 0,!0)}if(n){const o=r;r=s=>n({className:s,parseClassName:o})}return r},X7=e=>{const t=new Map;return e.orderSensitiveModifiers.forEach((n,r)=>{t.set(n,1e6+r)}),n=>{const r=[];let o=[];for(let s=0;s0&&(o.sort(),r.push(...o),o=[]),r.push(u)):o.push(u)}return o.length>0&&(o.sort(),r.push(...o)),r}},$7=e=>({cache:q7(e.cacheSize),parseClassName:W7(e),sortModifiers:X7(e),postfixLookupClassGroupIds:J7(e),...O7(e)}),J7=e=>{const t=Object.create(null),n=e.postfixLookupClassGroups;if(n)for(let r=0;r{const{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:o,sortModifiers:s,postfixLookupClassGroupIds:u}=t,c=[],d=e.trim().split(eB);let p="";for(let m=d.length-1;m>=0;m-=1){const g=d[m],{isExternal:y,modifiers:A,hasImportantModifier:w,baseClassName:b,maybePostfixModifierPosition:x}=n(g);if(y){p=g+(p.length>0?" "+p:p);continue}let E=!!x,S;if(E){const N=b.substring(0,x);S=r(N);const P=S&&u[S]?r(b):void 0;P&&P!==S&&(S=P,E=!1)}else S=r(b);if(!S){if(!E){p=g+(p.length>0?" "+p:p);continue}if(S=r(b),!S){p=g+(p.length>0?" "+p:p);continue}E=!1}const F=A.length===0?"":A.length===1?A[0]:s(A).join(":"),R=w?F+am:F,k=R+S;if(c.indexOf(k)>-1)continue;c.push(k);const B=o(S,E);for(let N=0;N0?" "+p:p)}return p},nB=(...e)=>{let t=0,n,r,o="";for(;t{if(typeof e=="string")return e;let t,n="";for(let r=0;r{let n,r,o,s;const u=d=>{const p=t.reduce((m,g)=>g(m),e());return n=$7(p),r=n.cache.get,o=n.cache.set,s=c,c(d)},c=d=>{const p=r(d);if(p)return p;const m=tB(d,n);return o(d,m),m};return s=u,(...d)=>s(nB(...d))},aB=[],_n=e=>{const t=n=>n[e]||aB;return t.isThemeGetter=!0,t},eb=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,tb=/^\((?:(\w[\w-]*):)?(.+)\)$/i,oB=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,iB=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,sB=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,uB=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,lB=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,cB=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,zo=e=>oB.test(e),at=e=>!!e&&!Number.isNaN(Number(e)),Na=e=>!!e&&Number.isInteger(Number(e)),om=e=>e.endsWith("%")&&at(e.slice(0,-1)),io=e=>iB.test(e),nb=()=>!0,dB=e=>sB.test(e)&&!uB.test(e),im=()=>!1,fB=e=>lB.test(e),hB=e=>cB.test(e),mB=e=>!De(e)&&!Fe(e),pB=e=>e.startsWith("@container")&&(e[10]==="/"&&e[11]!==void 0||e[11]==="s"&&e[16]!==void 0&&e.startsWith("-size/",10)||e[11]==="n"&&e[18]!==void 0&&e.startsWith("-normal/",10)),gB=e=>Lo(e,ub,im),De=e=>eb.test(e),Oi=e=>Lo(e,lb,dB),rb=e=>Lo(e,wB,at),vB=e=>Lo(e,db,nb),AB=e=>Lo(e,cb,im),ab=e=>Lo(e,ib,im),yB=e=>Lo(e,sb,hB),gd=e=>Lo(e,fb,fB),Fe=e=>tb.test(e),_l=e=>Ii(e,lb),bB=e=>Ii(e,cb),ob=e=>Ii(e,ib),xB=e=>Ii(e,ub),_B=e=>Ii(e,sb),vd=e=>Ii(e,fb,!0),CB=e=>Ii(e,db,!0),Lo=(e,t,n)=>{const r=eb.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},Ii=(e,t,n=!1)=>{const r=tb.exec(e);return r?r[1]?t(r[1]):n:!1},ib=e=>e==="position"||e==="percentage",sb=e=>e==="image"||e==="url",ub=e=>e==="length"||e==="size"||e==="bg-size",lb=e=>e==="length",wB=e=>e==="number",cb=e=>e==="family-name",db=e=>e==="number"||e==="weight",fb=e=>e==="shadow",EB=rB(()=>{const e=_n("color"),t=_n("font"),n=_n("text"),r=_n("font-weight"),o=_n("tracking"),s=_n("leading"),u=_n("breakpoint"),c=_n("container"),d=_n("spacing"),p=_n("radius"),m=_n("shadow"),g=_n("inset-shadow"),y=_n("text-shadow"),A=_n("drop-shadow"),w=_n("blur"),b=_n("perspective"),x=_n("aspect"),E=_n("ease"),S=_n("animate"),F=()=>["auto","avoid","all","avoid-page","page","left","right","column"],R=()=>["center","top","bottom","left","right","top-left","left-top","top-right","right-top","bottom-right","right-bottom","bottom-left","left-bottom"],k=()=>[...R(),Fe,De],B=()=>["auto","hidden","clip","visible","scroll"],N=()=>["auto","contain","none"],P=()=>[Fe,De,d],U=()=>[zo,"full","auto",...P()],Q=()=>[Na,"none","subgrid",Fe,De],$=()=>["auto",{span:["full",Na,Fe,De]},Na,Fe,De],q=()=>[Na,"auto",Fe,De],V=()=>["auto","min","max","fr",Fe,De],W=()=>["start","end","center","between","around","evenly","stretch","baseline","center-safe","end-safe"],ae=()=>["start","end","center","stretch","center-safe","end-safe"],j=()=>["auto",...P()],G=()=>[zo,"auto","full","dvw","dvh","lvw","lvh","svw","svh","min","max","fit",...P()],te=()=>[zo,"screen","full","dvw","lvw","svw","min","max","fit",...P()],ue=()=>[zo,"screen","full","lh","dvh","lvh","svh","min","max","fit",...P()],ie=()=>[e,Fe,De],z=()=>[...R(),ob,ab,{position:[Fe,De]}],O=()=>["no-repeat",{repeat:["","x","y","space","round"]}],T=()=>["auto","cover","contain",xB,gB,{size:[Fe,De]}],J=()=>[om,_l,Oi],le=()=>["","none","full",p,Fe,De],me=()=>["",at,_l,Oi],de=()=>["solid","dashed","dotted","double"],ye=()=>["normal","multiply","screen","overlay","darken","lighten","color-dodge","color-burn","hard-light","soft-light","difference","exclusion","hue","saturation","color","luminosity"],Ce=()=>[at,om,ob,ab],Ke=()=>["","none",w,Fe,De],Xe=()=>["none",at,Fe,De],st=()=>["none",at,Fe,De],Wt=()=>[at,Fe,De],jt=()=>[zo,"full",...P()];return{cacheSize:500,theme:{animate:["spin","ping","pulse","bounce"],aspect:["video"],blur:[io],breakpoint:[io],color:[nb],container:[io],"drop-shadow":[io],ease:["in","out","in-out"],font:[mB],"font-weight":["thin","extralight","light","normal","medium","semibold","bold","extrabold","black"],"inset-shadow":[io],leading:["none","tight","snug","normal","relaxed","loose"],perspective:["dramatic","near","normal","midrange","distant","none"],radius:[io],shadow:[io],spacing:["px",at],text:[io],"text-shadow":[io],tracking:["tighter","tight","normal","wide","wider","widest"]},classGroups:{aspect:[{aspect:["auto","square",zo,De,Fe,x]}],container:["container"],"container-type":[{"@container":["","normal","size",Fe,De]}],"container-named":[pB],columns:[{columns:[at,De,Fe,c]}],"break-after":[{"break-after":F()}],"break-before":[{"break-before":F()}],"break-inside":[{"break-inside":["auto","avoid","avoid-page","avoid-column"]}],"box-decoration":[{"box-decoration":["slice","clone"]}],box:[{box:["border","content"]}],display:["block","inline-block","inline","flex","inline-flex","table","inline-table","table-caption","table-cell","table-column","table-column-group","table-footer-group","table-header-group","table-row-group","table-row","flow-root","grid","inline-grid","contents","list-item","hidden"],sr:["sr-only","not-sr-only"],float:[{float:["right","left","none","start","end"]}],clear:[{clear:["left","right","both","none","start","end"]}],isolation:["isolate","isolation-auto"],"object-fit":[{object:["contain","cover","fill","none","scale-down"]}],"object-position":[{object:k()}],overflow:[{overflow:B()}],"overflow-x":[{"overflow-x":B()}],"overflow-y":[{"overflow-y":B()}],overscroll:[{overscroll:N()}],"overscroll-x":[{"overscroll-x":N()}],"overscroll-y":[{"overscroll-y":N()}],position:["static","fixed","absolute","relative","sticky"],inset:[{inset:U()}],"inset-x":[{"inset-x":U()}],"inset-y":[{"inset-y":U()}],start:[{"inset-s":U(),start:U()}],end:[{"inset-e":U(),end:U()}],"inset-bs":[{"inset-bs":U()}],"inset-be":[{"inset-be":U()}],top:[{top:U()}],right:[{right:U()}],bottom:[{bottom:U()}],left:[{left:U()}],visibility:["visible","invisible","collapse"],z:[{z:[Na,"auto",Fe,De]}],basis:[{basis:[zo,"full","auto",c,...P()]}],"flex-direction":[{flex:["row","row-reverse","col","col-reverse"]}],"flex-wrap":[{flex:["nowrap","wrap","wrap-reverse"]}],flex:[{flex:[at,zo,"auto","initial","none",De]}],grow:[{grow:["",at,Fe,De]}],shrink:[{shrink:["",at,Fe,De]}],order:[{order:[Na,"first","last","none",Fe,De]}],"grid-cols":[{"grid-cols":Q()}],"col-start-end":[{col:$()}],"col-start":[{"col-start":q()}],"col-end":[{"col-end":q()}],"grid-rows":[{"grid-rows":Q()}],"row-start-end":[{row:$()}],"row-start":[{"row-start":q()}],"row-end":[{"row-end":q()}],"grid-flow":[{"grid-flow":["row","col","dense","row-dense","col-dense"]}],"auto-cols":[{"auto-cols":V()}],"auto-rows":[{"auto-rows":V()}],gap:[{gap:P()}],"gap-x":[{"gap-x":P()}],"gap-y":[{"gap-y":P()}],"justify-content":[{justify:[...W(),"normal"]}],"justify-items":[{"justify-items":[...ae(),"normal"]}],"justify-self":[{"justify-self":["auto",...ae()]}],"align-content":[{content:["normal",...W()]}],"align-items":[{items:[...ae(),{baseline:["","last"]}]}],"align-self":[{self:["auto",...ae(),{baseline:["","last"]}]}],"place-content":[{"place-content":W()}],"place-items":[{"place-items":[...ae(),"baseline"]}],"place-self":[{"place-self":["auto",...ae()]}],p:[{p:P()}],px:[{px:P()}],py:[{py:P()}],ps:[{ps:P()}],pe:[{pe:P()}],pbs:[{pbs:P()}],pbe:[{pbe:P()}],pt:[{pt:P()}],pr:[{pr:P()}],pb:[{pb:P()}],pl:[{pl:P()}],m:[{m:j()}],mx:[{mx:j()}],my:[{my:j()}],ms:[{ms:j()}],me:[{me:j()}],mbs:[{mbs:j()}],mbe:[{mbe:j()}],mt:[{mt:j()}],mr:[{mr:j()}],mb:[{mb:j()}],ml:[{ml:j()}],"space-x":[{"space-x":P()}],"space-x-reverse":["space-x-reverse"],"space-y":[{"space-y":P()}],"space-y-reverse":["space-y-reverse"],size:[{size:G()}],"inline-size":[{inline:["auto",...te()]}],"min-inline-size":[{"min-inline":["auto",...te()]}],"max-inline-size":[{"max-inline":["none",...te()]}],"block-size":[{block:["auto",...ue()]}],"min-block-size":[{"min-block":["auto",...ue()]}],"max-block-size":[{"max-block":["none",...ue()]}],w:[{w:[c,"screen",...G()]}],"min-w":[{"min-w":[c,"screen","none",...G()]}],"max-w":[{"max-w":[c,"screen","none","prose",{screen:[u]},...G()]}],h:[{h:["screen","lh",...G()]}],"min-h":[{"min-h":["screen","lh","none",...G()]}],"max-h":[{"max-h":["screen","lh",...G()]}],"font-size":[{text:["base",n,_l,Oi]}],"font-smoothing":["antialiased","subpixel-antialiased"],"font-style":["italic","not-italic"],"font-weight":[{font:[r,CB,vB]}],"font-stretch":[{"font-stretch":["ultra-condensed","extra-condensed","condensed","semi-condensed","normal","semi-expanded","expanded","extra-expanded","ultra-expanded",om,De]}],"font-family":[{font:[bB,AB,t]}],"font-features":[{"font-features":[De]}],"fvn-normal":["normal-nums"],"fvn-ordinal":["ordinal"],"fvn-slashed-zero":["slashed-zero"],"fvn-figure":["lining-nums","oldstyle-nums"],"fvn-spacing":["proportional-nums","tabular-nums"],"fvn-fraction":["diagonal-fractions","stacked-fractions"],tracking:[{tracking:[o,Fe,De]}],"line-clamp":[{"line-clamp":[at,"none",Fe,rb]}],leading:[{leading:[s,...P()]}],"list-image":[{"list-image":["none",Fe,De]}],"list-style-position":[{list:["inside","outside"]}],"list-style-type":[{list:["disc","decimal","none",Fe,De]}],"text-alignment":[{text:["left","center","right","justify","start","end"]}],"placeholder-color":[{placeholder:ie()}],"text-color":[{text:ie()}],"text-decoration":["underline","overline","line-through","no-underline"],"text-decoration-style":[{decoration:[...de(),"wavy"]}],"text-decoration-thickness":[{decoration:[at,"from-font","auto",Fe,Oi]}],"text-decoration-color":[{decoration:ie()}],"underline-offset":[{"underline-offset":[at,"auto",Fe,De]}],"text-transform":["uppercase","lowercase","capitalize","normal-case"],"text-overflow":["truncate","text-ellipsis","text-clip"],"text-wrap":[{text:["wrap","nowrap","balance","pretty"]}],indent:[{indent:P()}],"tab-size":[{tab:[Na,Fe,De]}],"vertical-align":[{align:["baseline","top","middle","bottom","text-top","text-bottom","sub","super",Fe,De]}],whitespace:[{whitespace:["normal","nowrap","pre","pre-line","pre-wrap","break-spaces"]}],break:[{break:["normal","words","all","keep"]}],wrap:[{wrap:["break-word","anywhere","normal"]}],hyphens:[{hyphens:["none","manual","auto"]}],content:[{content:["none",Fe,De]}],"bg-attachment":[{bg:["fixed","local","scroll"]}],"bg-clip":[{"bg-clip":["border","padding","content","text"]}],"bg-origin":[{"bg-origin":["border","padding","content"]}],"bg-position":[{bg:z()}],"bg-repeat":[{bg:O()}],"bg-size":[{bg:T()}],"bg-image":[{bg:["none",{linear:[{to:["t","tr","r","br","b","bl","l","tl"]},Na,Fe,De],radial:["",Fe,De],conic:[Na,Fe,De]},_B,yB]}],"bg-color":[{bg:ie()}],"gradient-from-pos":[{from:J()}],"gradient-via-pos":[{via:J()}],"gradient-to-pos":[{to:J()}],"gradient-from":[{from:ie()}],"gradient-via":[{via:ie()}],"gradient-to":[{to:ie()}],rounded:[{rounded:le()}],"rounded-s":[{"rounded-s":le()}],"rounded-e":[{"rounded-e":le()}],"rounded-t":[{"rounded-t":le()}],"rounded-r":[{"rounded-r":le()}],"rounded-b":[{"rounded-b":le()}],"rounded-l":[{"rounded-l":le()}],"rounded-ss":[{"rounded-ss":le()}],"rounded-se":[{"rounded-se":le()}],"rounded-ee":[{"rounded-ee":le()}],"rounded-es":[{"rounded-es":le()}],"rounded-tl":[{"rounded-tl":le()}],"rounded-tr":[{"rounded-tr":le()}],"rounded-br":[{"rounded-br":le()}],"rounded-bl":[{"rounded-bl":le()}],"border-w":[{border:me()}],"border-w-x":[{"border-x":me()}],"border-w-y":[{"border-y":me()}],"border-w-s":[{"border-s":me()}],"border-w-e":[{"border-e":me()}],"border-w-bs":[{"border-bs":me()}],"border-w-be":[{"border-be":me()}],"border-w-t":[{"border-t":me()}],"border-w-r":[{"border-r":me()}],"border-w-b":[{"border-b":me()}],"border-w-l":[{"border-l":me()}],"divide-x":[{"divide-x":me()}],"divide-x-reverse":["divide-x-reverse"],"divide-y":[{"divide-y":me()}],"divide-y-reverse":["divide-y-reverse"],"border-style":[{border:[...de(),"hidden","none"]}],"divide-style":[{divide:[...de(),"hidden","none"]}],"border-color":[{border:ie()}],"border-color-x":[{"border-x":ie()}],"border-color-y":[{"border-y":ie()}],"border-color-s":[{"border-s":ie()}],"border-color-e":[{"border-e":ie()}],"border-color-bs":[{"border-bs":ie()}],"border-color-be":[{"border-be":ie()}],"border-color-t":[{"border-t":ie()}],"border-color-r":[{"border-r":ie()}],"border-color-b":[{"border-b":ie()}],"border-color-l":[{"border-l":ie()}],"divide-color":[{divide:ie()}],"outline-style":[{outline:[...de(),"none","hidden"]}],"outline-offset":[{"outline-offset":[at,Fe,De]}],"outline-w":[{outline:["",at,_l,Oi]}],"outline-color":[{outline:ie()}],shadow:[{shadow:["","none",m,vd,gd]}],"shadow-color":[{shadow:ie()}],"inset-shadow":[{"inset-shadow":["none",g,vd,gd]}],"inset-shadow-color":[{"inset-shadow":ie()}],"ring-w":[{ring:me()}],"ring-w-inset":["ring-inset"],"ring-color":[{ring:ie()}],"ring-offset-w":[{"ring-offset":[at,Oi]}],"ring-offset-color":[{"ring-offset":ie()}],"inset-ring-w":[{"inset-ring":me()}],"inset-ring-color":[{"inset-ring":ie()}],"text-shadow":[{"text-shadow":["none",y,vd,gd]}],"text-shadow-color":[{"text-shadow":ie()}],opacity:[{opacity:[at,Fe,De]}],"mix-blend":[{"mix-blend":[...ye(),"plus-darker","plus-lighter"]}],"bg-blend":[{"bg-blend":ye()}],"mask-clip":[{"mask-clip":["border","padding","content","fill","stroke","view"]},"mask-no-clip"],"mask-composite":[{mask:["add","subtract","intersect","exclude"]}],"mask-image-linear-pos":[{"mask-linear":[at]}],"mask-image-linear-from-pos":[{"mask-linear-from":Ce()}],"mask-image-linear-to-pos":[{"mask-linear-to":Ce()}],"mask-image-linear-from-color":[{"mask-linear-from":ie()}],"mask-image-linear-to-color":[{"mask-linear-to":ie()}],"mask-image-t-from-pos":[{"mask-t-from":Ce()}],"mask-image-t-to-pos":[{"mask-t-to":Ce()}],"mask-image-t-from-color":[{"mask-t-from":ie()}],"mask-image-t-to-color":[{"mask-t-to":ie()}],"mask-image-r-from-pos":[{"mask-r-from":Ce()}],"mask-image-r-to-pos":[{"mask-r-to":Ce()}],"mask-image-r-from-color":[{"mask-r-from":ie()}],"mask-image-r-to-color":[{"mask-r-to":ie()}],"mask-image-b-from-pos":[{"mask-b-from":Ce()}],"mask-image-b-to-pos":[{"mask-b-to":Ce()}],"mask-image-b-from-color":[{"mask-b-from":ie()}],"mask-image-b-to-color":[{"mask-b-to":ie()}],"mask-image-l-from-pos":[{"mask-l-from":Ce()}],"mask-image-l-to-pos":[{"mask-l-to":Ce()}],"mask-image-l-from-color":[{"mask-l-from":ie()}],"mask-image-l-to-color":[{"mask-l-to":ie()}],"mask-image-x-from-pos":[{"mask-x-from":Ce()}],"mask-image-x-to-pos":[{"mask-x-to":Ce()}],"mask-image-x-from-color":[{"mask-x-from":ie()}],"mask-image-x-to-color":[{"mask-x-to":ie()}],"mask-image-y-from-pos":[{"mask-y-from":Ce()}],"mask-image-y-to-pos":[{"mask-y-to":Ce()}],"mask-image-y-from-color":[{"mask-y-from":ie()}],"mask-image-y-to-color":[{"mask-y-to":ie()}],"mask-image-radial":[{"mask-radial":[Fe,De]}],"mask-image-radial-from-pos":[{"mask-radial-from":Ce()}],"mask-image-radial-to-pos":[{"mask-radial-to":Ce()}],"mask-image-radial-from-color":[{"mask-radial-from":ie()}],"mask-image-radial-to-color":[{"mask-radial-to":ie()}],"mask-image-radial-shape":[{"mask-radial":["circle","ellipse"]}],"mask-image-radial-size":[{"mask-radial":[{closest:["side","corner"],farthest:["side","corner"]}]}],"mask-image-radial-pos":[{"mask-radial-at":R()}],"mask-image-conic-pos":[{"mask-conic":[at]}],"mask-image-conic-from-pos":[{"mask-conic-from":Ce()}],"mask-image-conic-to-pos":[{"mask-conic-to":Ce()}],"mask-image-conic-from-color":[{"mask-conic-from":ie()}],"mask-image-conic-to-color":[{"mask-conic-to":ie()}],"mask-mode":[{mask:["alpha","luminance","match"]}],"mask-origin":[{"mask-origin":["border","padding","content","fill","stroke","view"]}],"mask-position":[{mask:z()}],"mask-repeat":[{mask:O()}],"mask-size":[{mask:T()}],"mask-type":[{"mask-type":["alpha","luminance"]}],"mask-image":[{mask:["none",Fe,De]}],filter:[{filter:["","none",Fe,De]}],blur:[{blur:Ke()}],brightness:[{brightness:[at,Fe,De]}],contrast:[{contrast:[at,Fe,De]}],"drop-shadow":[{"drop-shadow":["","none",A,vd,gd]}],"drop-shadow-color":[{"drop-shadow":ie()}],grayscale:[{grayscale:["",at,Fe,De]}],"hue-rotate":[{"hue-rotate":[at,Fe,De]}],invert:[{invert:["",at,Fe,De]}],saturate:[{saturate:[at,Fe,De]}],sepia:[{sepia:["",at,Fe,De]}],"backdrop-filter":[{"backdrop-filter":["","none",Fe,De]}],"backdrop-blur":[{"backdrop-blur":Ke()}],"backdrop-brightness":[{"backdrop-brightness":[at,Fe,De]}],"backdrop-contrast":[{"backdrop-contrast":[at,Fe,De]}],"backdrop-grayscale":[{"backdrop-grayscale":["",at,Fe,De]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[at,Fe,De]}],"backdrop-invert":[{"backdrop-invert":["",at,Fe,De]}],"backdrop-opacity":[{"backdrop-opacity":[at,Fe,De]}],"backdrop-saturate":[{"backdrop-saturate":[at,Fe,De]}],"backdrop-sepia":[{"backdrop-sepia":["",at,Fe,De]}],"border-collapse":[{border:["collapse","separate"]}],"border-spacing":[{"border-spacing":P()}],"border-spacing-x":[{"border-spacing-x":P()}],"border-spacing-y":[{"border-spacing-y":P()}],"table-layout":[{table:["auto","fixed"]}],caption:[{caption:["top","bottom"]}],transition:[{transition:["","all","colors","opacity","shadow","transform","none",Fe,De]}],"transition-behavior":[{transition:["normal","discrete"]}],duration:[{duration:[at,"initial",Fe,De]}],ease:[{ease:["linear","initial",E,Fe,De]}],delay:[{delay:[at,Fe,De]}],animate:[{animate:["none",S,Fe,De]}],backface:[{backface:["hidden","visible"]}],perspective:[{perspective:[b,Fe,De]}],"perspective-origin":[{"perspective-origin":k()}],rotate:[{rotate:Xe()}],"rotate-x":[{"rotate-x":Xe()}],"rotate-y":[{"rotate-y":Xe()}],"rotate-z":[{"rotate-z":Xe()}],scale:[{scale:st()}],"scale-x":[{"scale-x":st()}],"scale-y":[{"scale-y":st()}],"scale-z":[{"scale-z":st()}],"scale-3d":["scale-3d"],skew:[{skew:Wt()}],"skew-x":[{"skew-x":Wt()}],"skew-y":[{"skew-y":Wt()}],transform:[{transform:[Fe,De,"","none","gpu","cpu"]}],"transform-origin":[{origin:k()}],"transform-style":[{transform:["3d","flat"]}],translate:[{translate:jt()}],"translate-x":[{"translate-x":jt()}],"translate-y":[{"translate-y":jt()}],"translate-z":[{"translate-z":jt()}],"translate-none":["translate-none"],zoom:[{zoom:[Na,Fe,De]}],accent:[{accent:ie()}],appearance:[{appearance:["none","auto"]}],"caret-color":[{caret:ie()}],"color-scheme":[{scheme:["normal","dark","light","light-dark","only-dark","only-light"]}],cursor:[{cursor:["auto","default","pointer","wait","text","move","help","not-allowed","none","context-menu","progress","cell","crosshair","vertical-text","alias","copy","no-drop","grab","grabbing","all-scroll","col-resize","row-resize","n-resize","e-resize","s-resize","w-resize","ne-resize","nw-resize","se-resize","sw-resize","ew-resize","ns-resize","nesw-resize","nwse-resize","zoom-in","zoom-out",Fe,De]}],"field-sizing":[{"field-sizing":["fixed","content"]}],"pointer-events":[{"pointer-events":["auto","none"]}],resize:[{resize:["none","","y","x"]}],"scroll-behavior":[{scroll:["auto","smooth"]}],"scrollbar-thumb-color":[{"scrollbar-thumb":ie()}],"scrollbar-track-color":[{"scrollbar-track":ie()}],"scrollbar-gutter":[{"scrollbar-gutter":["auto","stable","both"]}],"scrollbar-w":[{scrollbar:["auto","thin","none"]}],"scroll-m":[{"scroll-m":P()}],"scroll-mx":[{"scroll-mx":P()}],"scroll-my":[{"scroll-my":P()}],"scroll-ms":[{"scroll-ms":P()}],"scroll-me":[{"scroll-me":P()}],"scroll-mbs":[{"scroll-mbs":P()}],"scroll-mbe":[{"scroll-mbe":P()}],"scroll-mt":[{"scroll-mt":P()}],"scroll-mr":[{"scroll-mr":P()}],"scroll-mb":[{"scroll-mb":P()}],"scroll-ml":[{"scroll-ml":P()}],"scroll-p":[{"scroll-p":P()}],"scroll-px":[{"scroll-px":P()}],"scroll-py":[{"scroll-py":P()}],"scroll-ps":[{"scroll-ps":P()}],"scroll-pe":[{"scroll-pe":P()}],"scroll-pbs":[{"scroll-pbs":P()}],"scroll-pbe":[{"scroll-pbe":P()}],"scroll-pt":[{"scroll-pt":P()}],"scroll-pr":[{"scroll-pr":P()}],"scroll-pb":[{"scroll-pb":P()}],"scroll-pl":[{"scroll-pl":P()}],"snap-align":[{snap:["start","end","center","align-none"]}],"snap-stop":[{snap:["normal","always"]}],"snap-type":[{snap:["none","x","y","both"]}],"snap-strictness":[{snap:["mandatory","proximity"]}],touch:[{touch:["auto","none","manipulation"]}],"touch-x":[{"touch-pan":["x","left","right"]}],"touch-y":[{"touch-pan":["y","up","down"]}],"touch-pz":["touch-pinch-zoom"],select:[{select:["none","text","all","auto"]}],"will-change":[{"will-change":["auto","scroll","contents","transform",Fe,De]}],fill:[{fill:["none",...ie()]}],"stroke-w":[{stroke:[at,_l,Oi,rb]}],stroke:[{stroke:["none",...ie()]}],"forced-color-adjust":[{"forced-color-adjust":["auto","none"]}]},conflictingClassGroups:{"container-named":["container-type"],overflow:["overflow-x","overflow-y"],overscroll:["overscroll-x","overscroll-y"],inset:["inset-x","inset-y","inset-bs","inset-be","start","end","top","right","bottom","left"],"inset-x":["right","left"],"inset-y":["top","bottom"],flex:["basis","grow","shrink"],gap:["gap-x","gap-y"],p:["px","py","ps","pe","pbs","pbe","pt","pr","pb","pl"],px:["pr","pl"],py:["pt","pb"],m:["mx","my","ms","me","mbs","mbe","mt","mr","mb","ml"],mx:["mr","ml"],my:["mt","mb"],size:["w","h"],"font-size":["leading"],"fvn-normal":["fvn-ordinal","fvn-slashed-zero","fvn-figure","fvn-spacing","fvn-fraction"],"fvn-ordinal":["fvn-normal"],"fvn-slashed-zero":["fvn-normal"],"fvn-figure":["fvn-normal"],"fvn-spacing":["fvn-normal"],"fvn-fraction":["fvn-normal"],"line-clamp":["display","overflow"],rounded:["rounded-s","rounded-e","rounded-t","rounded-r","rounded-b","rounded-l","rounded-ss","rounded-se","rounded-ee","rounded-es","rounded-tl","rounded-tr","rounded-br","rounded-bl"],"rounded-s":["rounded-ss","rounded-es"],"rounded-e":["rounded-se","rounded-ee"],"rounded-t":["rounded-tl","rounded-tr"],"rounded-r":["rounded-tr","rounded-br"],"rounded-b":["rounded-br","rounded-bl"],"rounded-l":["rounded-tl","rounded-bl"],"border-spacing":["border-spacing-x","border-spacing-y"],"border-w":["border-w-x","border-w-y","border-w-s","border-w-e","border-w-bs","border-w-be","border-w-t","border-w-r","border-w-b","border-w-l"],"border-w-x":["border-w-r","border-w-l"],"border-w-y":["border-w-t","border-w-b"],"border-color":["border-color-x","border-color-y","border-color-s","border-color-e","border-color-bs","border-color-be","border-color-t","border-color-r","border-color-b","border-color-l"],"border-color-x":["border-color-r","border-color-l"],"border-color-y":["border-color-t","border-color-b"],translate:["translate-x","translate-y","translate-none"],"translate-none":["translate","translate-x","translate-y","translate-z"],"scroll-m":["scroll-mx","scroll-my","scroll-ms","scroll-me","scroll-mbs","scroll-mbe","scroll-mt","scroll-mr","scroll-mb","scroll-ml"],"scroll-mx":["scroll-mr","scroll-ml"],"scroll-my":["scroll-mt","scroll-mb"],"scroll-p":["scroll-px","scroll-py","scroll-ps","scroll-pe","scroll-pbs","scroll-pbe","scroll-pt","scroll-pr","scroll-pb","scroll-pl"],"scroll-px":["scroll-pr","scroll-pl"],"scroll-py":["scroll-pt","scroll-pb"],touch:["touch-x","touch-y","touch-pz"],"touch-x":["touch"],"touch-y":["touch"],"touch-pz":["touch"]},conflictingClassGroupModifiers:{"font-size":["leading"]},postfixLookupClassGroups:["container-type"],orderSensitiveModifiers:["*","**","after","backdrop","before","details-content","file","first-letter","first-line","marker","placeholder","selection"]}}),hb=e=>typeof e=="boolean"?`${e}`:e===0?"0":e,mb=Yy,Oo=(e,t)=>n=>{var r;if(t?.variants==null)return mb(e,n?.class,n?.className);const{variants:o,defaultVariants:s}=t,u=Object.keys(o).map(p=>{const m=n?.[p],g=s?.[p];if(m===null)return null;const y=hb(m)||hb(g);return o[p][y]}),c=n&&Object.entries(n).reduce((p,m)=>{let[g,y]=m;return y===void 0||(p[g]=y),p},{}),d=t==null||(r=t.compoundVariants)===null||r===void 0?void 0:r.reduce((p,m)=>{let{class:g,className:y,...A}=m;return Object.entries(A).every(w=>{let[b,x]=w;return Array.isArray(x)?x.includes({...s,...c}[b]):{...s,...c}[b]===x})?[...p,g,y]:p},[]);return mb(e,u,d,n?.class,n?.className)};const SB=e=>e.replace(/([a-z0-9])([A-Z])/g,"$1-$2").toLowerCase(),DB=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(t,n,r)=>r?r.toUpperCase():n.toLowerCase()),pb=e=>{const t=DB(e);return t.charAt(0).toUpperCase()+t.slice(1)},gb=(...e)=>e.filter((t,n,r)=>!!t&&t.trim()!==""&&r.indexOf(t)===n).join(" ").trim(),FB=e=>{for(const t in e)if(t.startsWith("aria-")||t==="role"||t==="title")return!0};var RB={xmlns:"http://www.w3.org/2000/svg",width:24,height:24,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:2,strokeLinecap:"round",strokeLinejoin:"round"};const BB=C.forwardRef(({color:e="currentColor",size:t=24,strokeWidth:n=2,absoluteStrokeWidth:r,className:o="",children:s,iconNode:u,...c},d)=>C.createElement("svg",{ref:d,...RB,width:t,height:t,stroke:e,strokeWidth:r?Number(n)*24/Number(t):n,className:gb("lucide",o),...!s&&!FB(c)&&{"aria-hidden":"true"},...c},[...u.map(([p,m])=>C.createElement(p,m)),...Array.isArray(s)?s:[s]]));const Gt=(e,t)=>{const n=C.forwardRef(({className:r,...o},s)=>C.createElement(BB,{ref:s,iconNode:t,className:gb(`lucide-${SB(pb(e))}`,`lucide-${e}`,r),...o}));return n.displayName=pb(e),n};const kB=Gt("arrow-left",[["path",{d:"m12 19-7-7 7-7",key:"1l729n"}],["path",{d:"M19 12H5",key:"x3x0zl"}]]);const sm=Gt("check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);const Cl=Gt("chevron-down",[["path",{d:"m6 9 6 6 6-6",key:"qrunsl"}]]);const vb=Gt("chevron-up",[["path",{d:"m18 15-6-6-6 6",key:"153udz"}]]);const um=Gt("copy",[["rect",{width:"14",height:"14",x:"8",y:"8",rx:"2",ry:"2",key:"17jyea"}],["path",{d:"M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2",key:"zix9uf"}]]);const MB=Gt("ellipsis-vertical",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"12",cy:"5",r:"1",key:"gxeob9"}],["circle",{cx:"12",cy:"19",r:"1",key:"lyex9k"}]]);const Ab=Gt("ellipsis",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"19",cy:"12",r:"1",key:"1wjl8i"}],["circle",{cx:"5",cy:"12",r:"1",key:"1pcz8c"}]]);const NB=Gt("eye",[["path",{d:"M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0",key:"1nclc0"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);const TB=Gt("flag",[["path",{d:"M4 15s1-1 4-1 5 2 8 2 4-1 4-1V3s-1 1-4 1-5-2-8-2-4 1-4 1z",key:"i9b6wo"}],["line",{x1:"4",x2:"4",y1:"22",y2:"15",key:"1cm3nv"}]]);const jB=Gt("image",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",ry:"2",key:"1m3agn"}],["circle",{cx:"9",cy:"9",r:"2",key:"af1f0g"}],["path",{d:"m21 15-3.086-3.086a2 2 0 0 0-2.828 0L6 21",key:"1xmnt7"}]]);const PB=Gt("info",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 16v-4",key:"1dtifu"}],["path",{d:"M12 8h.01",key:"e9boi3"}]]);const zB=Gt("link",[["path",{d:"M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71",key:"1cjeqo"}],["path",{d:"M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71",key:"19qd67"}]]);const yb=Gt("mail",[["path",{d:"m22 7-8.991 5.727a2 2 0 0 1-2.009 0L2 7",key:"132q7q"}],["rect",{x:"2",y:"4",width:"20",height:"16",rx:"2",key:"izxlao"}]]);const LB=Gt("message-square",[["path",{d:"M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z",key:"1lielz"}]]);const OB=Gt("minus",[["path",{d:"M5 12h14",key:"1ays0h"}]]);const IB=Gt("pencil-line",[["path",{d:"M12 20h9",key:"t2du7b"}],["path",{d:"M16.376 3.622a1 1 0 0 1 3.002 3.002L7.368 18.635a2 2 0 0 1-.855.506l-2.872.838a.5.5 0 0 1-.62-.62l.838-2.872a2 2 0 0 1 .506-.854z",key:"1ykcvy"}],["path",{d:"m15 5 3 3",key:"1w25hb"}]]);const UB=Gt("pipette",[["path",{d:"m12 9-8.414 8.414A2 2 0 0 0 3 18.828v1.344a2 2 0 0 1-.586 1.414A2 2 0 0 1 3.828 21h1.344a2 2 0 0 0 1.414-.586L15 12",key:"1y3wsu"}],["path",{d:"m18 9 .4.4a1 1 0 1 1-3 3l-3.8-3.8a1 1 0 1 1 3-3l.4.4 3.4-3.4a1 1 0 1 1 3 3z",key:"110lr1"}],["path",{d:"m2 22 .414-.414",key:"jhxm08"}]]);const Ad=Gt("plus",[["path",{d:"M5 12h14",key:"1ays0h"}],["path",{d:"M12 5v14",key:"s699le"}]]);const bb=Gt("refresh-ccw",[["path",{d:"M21 12a9 9 0 0 0-9-9 9.75 9.75 0 0 0-6.74 2.74L3 8",key:"14sxne"}],["path",{d:"M3 3v5h5",key:"1xhq8a"}],["path",{d:"M3 12a9 9 0 0 0 9 9 9.75 9.75 0 0 0 6.74-2.74L21 16",key:"1hlbsb"}],["path",{d:"M16 16h5v5",key:"ccwih5"}]]);const xb=Gt("smartphone",[["rect",{width:"14",height:"20",x:"5",y:"2",rx:"2",ry:"2",key:"1yt0o3"}],["path",{d:"M12 18h.01",key:"mhygvu"}]]);const VB=Gt("square-pen",[["path",{d:"M12 3H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h14a2 2 0 0 0 2-2v-7",key:"1m0v6g"}],["path",{d:"M18.375 2.625a1 1 0 0 1 3 3l-9.013 9.014a2 2 0 0 1-.853.505l-2.873.84a.5.5 0 0 1-.62-.62l.84-2.873a2 2 0 0 1 .506-.852z",key:"ohrbg2"}]]);const wl=Gt("trash-2",[["path",{d:"M3 6h18",key:"d0wm0j"}],["path",{d:"M19 6v14c0 1-1 2-2 2H7c-1 0-2-1-2-2V6",key:"4alrt4"}],["path",{d:"M8 6V4c0-1 1-2 2-2h4c1 0 2 1 2 2v2",key:"v07s0e"}],["line",{x1:"10",x2:"10",y1:"11",y2:"17",key:"1uufr5"}],["line",{x1:"14",x2:"14",y1:"11",y2:"17",key:"xtxkd"}]]);const HB=Gt("triangle-alert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);const QB=Gt("upload",[["path",{d:"M12 3v12",key:"1x0j5s"}],["path",{d:"m17 8-5-5-5 5",key:"7q97r8"}],["path",{d:"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4",key:"ih7n3h"}]]);const _b=Gt("x",[["path",{d:"M18 6 6 18",key:"1bl5f8"}],["path",{d:"m6 6 12 12",key:"d8bk6v"}]]);var El=wA();const Cb=sh(El);function GB(e){if(typeof document>"u")return;let t=document.head||document.getElementsByTagName("head")[0],n=document.createElement("style");n.type="text/css",t.appendChild(n),n.styleSheet?n.styleSheet.cssText=e:n.appendChild(document.createTextNode(e))}const YB=e=>{switch(e){case"success":return ZB;case"info":return XB;case"warning":return WB;case"error":return $B;default:return null}},KB=Array(12).fill(0),qB=({visible:e,className:t})=>Y.createElement("div",{className:["sonner-loading-wrapper",t].filter(Boolean).join(" "),"data-visible":e},Y.createElement("div",{className:"sonner-spinner"},KB.map((n,r)=>Y.createElement("div",{className:"sonner-loading-bar",key:`spinner-bar-${r}`})))),ZB=Y.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},Y.createElement("path",{fillRule:"evenodd",d:"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z",clipRule:"evenodd"})),WB=Y.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 24 24",fill:"currentColor",height:"20",width:"20"},Y.createElement("path",{fillRule:"evenodd",d:"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z",clipRule:"evenodd"})),XB=Y.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},Y.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z",clipRule:"evenodd"})),$B=Y.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",viewBox:"0 0 20 20",fill:"currentColor",height:"20",width:"20"},Y.createElement("path",{fillRule:"evenodd",d:"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z",clipRule:"evenodd"})),JB=Y.createElement("svg",{xmlns:"http://www.w3.org/2000/svg",width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"},Y.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),Y.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"})),e2=()=>{const[e,t]=Y.useState(document.hidden);return Y.useEffect(()=>{const n=()=>{t(document.hidden)};return document.addEventListener("visibilitychange",n),()=>window.removeEventListener("visibilitychange",n)},[]),e};let lm=1;class t2{constructor(){this.subscribe=t=>(this.subscribers.push(t),()=>{const n=this.subscribers.indexOf(t);this.subscribers.splice(n,1)}),this.publish=t=>{this.subscribers.forEach(n=>n(t))},this.addToast=t=>{this.publish(t),this.toasts=[...this.toasts,t]},this.create=t=>{var n;const{message:r,...o}=t,s=typeof t?.id=="number"||((n=t.id)==null?void 0:n.length)>0?t.id:lm++,u=this.toasts.find(d=>d.id===s),c=t.dismissible===void 0?!0:t.dismissible;return this.dismissedToasts.has(s)&&this.dismissedToasts.delete(s),u?this.toasts=this.toasts.map(d=>d.id===s?(this.publish({...d,...t,id:s,title:r}),{...d,...t,id:s,dismissible:c,title:r}):d):this.addToast({title:r,...o,dismissible:c,id:s}),s},this.dismiss=t=>(t?(this.dismissedToasts.add(t),requestAnimationFrame(()=>this.subscribers.forEach(n=>n({id:t,dismiss:!0})))):this.toasts.forEach(n=>{this.subscribers.forEach(r=>r({id:n.id,dismiss:!0}))}),t),this.message=(t,n)=>this.create({...n,message:t}),this.error=(t,n)=>this.create({...n,message:t,type:"error"}),this.success=(t,n)=>this.create({...n,type:"success",message:t}),this.info=(t,n)=>this.create({...n,type:"info",message:t}),this.warning=(t,n)=>this.create({...n,type:"warning",message:t}),this.loading=(t,n)=>this.create({...n,type:"loading",message:t}),this.promise=(t,n)=>{if(!n)return;let r;n.loading!==void 0&&(r=this.create({...n,promise:t,type:"loading",message:n.loading,description:typeof n.description!="function"?n.description:void 0}));const o=Promise.resolve(t instanceof Function?t():t);let s=r!==void 0,u;const c=o.then(async p=>{if(u=["resolve",p],Y.isValidElement(p))s=!1,this.create({id:r,type:"default",message:p});else if(r2(p)&&!p.ok){s=!1;const g=typeof n.error=="function"?await n.error(`HTTP error! status: ${p.status}`):n.error,y=typeof n.description=="function"?await n.description(`HTTP error! status: ${p.status}`):n.description,w=typeof g=="object"&&!Y.isValidElement(g)?g:{message:g};this.create({id:r,type:"error",description:y,...w})}else if(p instanceof Error){s=!1;const g=typeof n.error=="function"?await n.error(p):n.error,y=typeof n.description=="function"?await n.description(p):n.description,w=typeof g=="object"&&!Y.isValidElement(g)?g:{message:g};this.create({id:r,type:"error",description:y,...w})}else if(n.success!==void 0){s=!1;const g=typeof n.success=="function"?await n.success(p):n.success,y=typeof n.description=="function"?await n.description(p):n.description,w=typeof g=="object"&&!Y.isValidElement(g)?g:{message:g};this.create({id:r,type:"success",description:y,...w})}}).catch(async p=>{if(u=["reject",p],n.error!==void 0){s=!1;const m=typeof n.error=="function"?await n.error(p):n.error,g=typeof n.description=="function"?await n.description(p):n.description,A=typeof m=="object"&&!Y.isValidElement(m)?m:{message:m};this.create({id:r,type:"error",description:g,...A})}}).finally(()=>{s&&(this.dismiss(r),r=void 0),n.finally==null||n.finally.call(n)}),d=()=>new Promise((p,m)=>c.then(()=>u[0]==="reject"?m(u[1]):p(u[1])).catch(m));return typeof r!="string"&&typeof r!="number"?{unwrap:d}:Object.assign(r,{unwrap:d})},this.custom=(t,n)=>{const r=n?.id||lm++;return this.create({jsx:t(r),id:r,...n}),r},this.getActiveToasts=()=>this.toasts.filter(t=>!this.dismissedToasts.has(t.id)),this.subscribers=[],this.toasts=[],this.dismissedToasts=new Set}}const ar=new t2,n2=(e,t)=>{const n=t?.id||lm++;return ar.addToast({title:e,...t,id:n}),n},r2=e=>e&&typeof e=="object"&&"ok"in e&&typeof e.ok=="boolean"&&"status"in e&&typeof e.status=="number",a2=n2,o2=()=>ar.toasts,i2=()=>ar.getActiveToasts(),Io=Object.assign(a2,{success:ar.success,info:ar.info,warning:ar.warning,error:ar.error,custom:ar.custom,message:ar.message,promise:ar.promise,dismiss:ar.dismiss,loading:ar.loading},{getHistory:o2,getToasts:i2});GB("[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}");function yd(e){return e.label!==void 0}const s2=3,u2="24px",l2="16px",wb=4e3,c2=356,d2=14,f2=45,h2=200;function Ta(...e){return e.filter(Boolean).join(" ")}function m2(e){const[t,n]=e.split("-"),r=[];return t&&r.push(t),n&&r.push(n),r}const p2=e=>{var t,n,r,o,s,u,c,d,p;const{invert:m,toast:g,unstyled:y,interacting:A,setHeights:w,visibleToasts:b,heights:x,index:E,toasts:S,expanded:F,removeToast:R,defaultRichColors:k,closeButton:B,style:N,cancelButtonStyle:P,actionButtonStyle:U,className:Q="",descriptionClassName:$="",duration:q,position:V,gap:W,expandByDefault:ae,classNames:j,icons:G,closeButtonAriaLabel:te="Close toast"}=e,[ue,ie]=Y.useState(null),[z,O]=Y.useState(null),[T,J]=Y.useState(!1),[le,me]=Y.useState(!1),[de,ye]=Y.useState(!1),[Ce,Ke]=Y.useState(!1),[Xe,st]=Y.useState(!1),[Wt,jt]=Y.useState(0),[Br,sr]=Y.useState(0),kr=Y.useRef(g.duration||q||wb),ti=Y.useRef(null),er=Y.useRef(null),ni=E===0,ri=E+1<=b,Nn=g.type,Ka=g.dismissible!==!1,Kn=g.className||"",qf=g.descriptionClassName||"",qa=Y.useMemo(()=>x.findIndex(Ie=>Ie.toastId===g.id)||0,[x,g.id]),L=Y.useMemo(()=>{var Ie;return(Ie=g.closeButton)!=null?Ie:B},[g.closeButton,B]),K=Y.useMemo(()=>g.duration||q||wb,[g.duration,q]),ee=Y.useRef(0),pe=Y.useRef(0),Ae=Y.useRef(0),be=Y.useRef(null),[ve,Ee]=V.split("-"),Oe=Y.useMemo(()=>x.reduce((Ie,Pt,Sn)=>Sn>=qa?Ie:Ie+Pt.height,0),[x,qa]),ct=e2(),qn=g.invert||m,Tn=Nn==="loading";pe.current=Y.useMemo(()=>qa*W+Oe,[qa,Oe]),Y.useEffect(()=>{kr.current=K},[K]),Y.useEffect(()=>{J(!0)},[]),Y.useEffect(()=>{const Ie=er.current;if(Ie){const Pt=Ie.getBoundingClientRect().height;return sr(Pt),w(Sn=>[{toastId:g.id,height:Pt,position:g.position},...Sn]),()=>w(Sn=>Sn.filter(Zn=>Zn.toastId!==g.id))}},[w,g.id]),Y.useLayoutEffect(()=>{if(!T)return;const Ie=er.current,Pt=Ie.style.height;Ie.style.height="auto";const Sn=Ie.getBoundingClientRect().height;Ie.style.height=Pt,sr(Sn),w(Zn=>Zn.find(an=>an.toastId===g.id)?Zn.map(an=>an.toastId===g.id?{...an,height:Sn}:an):[{toastId:g.id,height:Sn,position:g.position},...Zn])},[T,g.title,g.description,w,g.id,g.jsx,g.action,g.cancel]);const En=Y.useCallback(()=>{me(!0),jt(pe.current),w(Ie=>Ie.filter(Pt=>Pt.toastId!==g.id)),setTimeout(()=>{R(g)},h2)},[g,R,w,pe]);Y.useEffect(()=>{if(g.promise&&Nn==="loading"||g.duration===1/0||g.type==="loading")return;let Ie;return F||A||ct?(()=>{if(Ae.current{g.onAutoClose==null||g.onAutoClose.call(g,g),En()},kr.current)),()=>clearTimeout(Ie)},[F,A,g,Nn,ct,En]),Y.useEffect(()=>{g.delete&&(En(),g.onDismiss==null||g.onDismiss.call(g,g))},[En,g.delete]);function Za(){var Ie;if(G?.loading){var Pt;return Y.createElement("div",{className:Ta(j?.loader,g==null||(Pt=g.classNames)==null?void 0:Pt.loader,"sonner-loader"),"data-visible":Nn==="loading"},G.loading)}return Y.createElement(qB,{className:Ta(j?.loader,g==null||(Ie=g.classNames)==null?void 0:Ie.loader),visible:Nn==="loading"})}const Wa=g.icon||G?.[Nn]||YB(Nn);var ho,Mr;return Y.createElement("li",{tabIndex:0,ref:er,className:Ta(Q,Kn,j?.toast,g==null||(t=g.classNames)==null?void 0:t.toast,j?.default,j?.[Nn],g==null||(n=g.classNames)==null?void 0:n[Nn]),"data-sonner-toast":"","data-rich-colors":(ho=g.richColors)!=null?ho:k,"data-styled":!(g.jsx||g.unstyled||y),"data-mounted":T,"data-promise":!!g.promise,"data-swiped":Xe,"data-removed":le,"data-visible":ri,"data-y-position":ve,"data-x-position":Ee,"data-index":E,"data-front":ni,"data-swiping":de,"data-dismissible":Ka,"data-type":Nn,"data-invert":qn,"data-swipe-out":Ce,"data-swipe-direction":z,"data-expanded":!!(F||ae&&T),"data-testid":g.testId,style:{"--index":E,"--toasts-before":E,"--z-index":S.length-E,"--offset":`${le?Wt:pe.current}px`,"--initial-height":ae?"auto":`${Br}px`,...N,...g.style},onDragEnd:()=>{ye(!1),ie(null),be.current=null},onPointerDown:Ie=>{Ie.button!==2&&(Tn||!Ka||(ti.current=new Date,jt(pe.current),Ie.target.setPointerCapture(Ie.pointerId),Ie.target.tagName!=="BUTTON"&&(ye(!0),be.current={x:Ie.clientX,y:Ie.clientY})))},onPointerUp:()=>{var Ie,Pt,Sn;if(Ce||!Ka)return;be.current=null;const Zn=Number(((Ie=er.current)==null?void 0:Ie.style.getPropertyValue("--swipe-amount-x").replace("px",""))||0),ai=Number(((Pt=er.current)==null?void 0:Pt.style.getPropertyValue("--swipe-amount-y").replace("px",""))||0),an=new Date().getTime()-((Sn=ti.current)==null?void 0:Sn.getTime()),ur=ue==="x"?Zn:ai,us=Math.abs(ur)/an;if(Math.abs(ur)>=f2||us>.11){jt(pe.current),g.onDismiss==null||g.onDismiss.call(g,g),O(ue==="x"?Zn>0?"right":"left":ai>0?"down":"up"),En(),Ke(!0);return}else{var lr,cr;(lr=er.current)==null||lr.style.setProperty("--swipe-amount-x","0px"),(cr=er.current)==null||cr.style.setProperty("--swipe-amount-y","0px")}st(!1),ye(!1),ie(null)},onPointerMove:Ie=>{var Pt,Sn,Zn;if(!be.current||!Ka||((Pt=window.getSelection())==null?void 0:Pt.toString().length)>0)return;const an=Ie.clientY-be.current.y,ur=Ie.clientX-be.current.x;var us;const lr=(us=e.swipeDirections)!=null?us:m2(V);!ue&&(Math.abs(ur)>1||Math.abs(an)>1)&&ie(Math.abs(ur)>Math.abs(an)?"x":"y");let cr={x:0,y:0};const _u=Da=>1/(1.5+Math.abs(Da)/20);if(ue==="y"){if(lr.includes("top")||lr.includes("bottom"))if(lr.includes("top")&&an<0||lr.includes("bottom")&&an>0)cr.y=an;else{const Da=an*_u(an);cr.y=Math.abs(Da)0)cr.x=ur;else{const Da=ur*_u(ur);cr.x=Math.abs(Da)0||Math.abs(cr.y)>0)&&st(!0),(Sn=er.current)==null||Sn.style.setProperty("--swipe-amount-x",`${cr.x}px`),(Zn=er.current)==null||Zn.style.setProperty("--swipe-amount-y",`${cr.y}px`)}},L&&!g.jsx&&Nn!=="loading"?Y.createElement("button",{"aria-label":te,"data-disabled":Tn,"data-close-button":!0,onClick:Tn||!Ka?()=>{}:()=>{En(),g.onDismiss==null||g.onDismiss.call(g,g)},className:Ta(j?.closeButton,g==null||(r=g.classNames)==null?void 0:r.closeButton)},(Mr=G?.close)!=null?Mr:JB):null,(Nn||g.icon||g.promise)&&g.icon!==null&&(G?.[Nn]!==null||g.icon)?Y.createElement("div",{"data-icon":"",className:Ta(j?.icon,g==null||(o=g.classNames)==null?void 0:o.icon)},g.promise||g.type==="loading"&&!g.icon?g.icon||Za():null,g.type!=="loading"?Wa:null):null,Y.createElement("div",{"data-content":"",className:Ta(j?.content,g==null||(s=g.classNames)==null?void 0:s.content)},Y.createElement("div",{"data-title":"",className:Ta(j?.title,g==null||(u=g.classNames)==null?void 0:u.title)},g.jsx?g.jsx:typeof g.title=="function"?g.title():g.title),g.description?Y.createElement("div",{"data-description":"",className:Ta($,qf,j?.description,g==null||(c=g.classNames)==null?void 0:c.description)},typeof g.description=="function"?g.description():g.description):null),Y.isValidElement(g.cancel)?g.cancel:g.cancel&&yd(g.cancel)?Y.createElement("button",{"data-button":!0,"data-cancel":!0,style:g.cancelButtonStyle||P,onClick:Ie=>{yd(g.cancel)&&Ka&&(g.cancel.onClick==null||g.cancel.onClick.call(g.cancel,Ie),En())},className:Ta(j?.cancelButton,g==null||(d=g.classNames)==null?void 0:d.cancelButton)},g.cancel.label):null,Y.isValidElement(g.action)?g.action:g.action&&yd(g.action)?Y.createElement("button",{"data-button":!0,"data-action":!0,style:g.actionButtonStyle||U,onClick:Ie=>{yd(g.action)&&(g.action.onClick==null||g.action.onClick.call(g.action,Ie),!Ie.defaultPrevented&&En())},className:Ta(j?.actionButton,g==null||(p=g.classNames)==null?void 0:p.actionButton)},g.action.label):null)};function Eb(){if(typeof window>"u"||typeof document>"u")return"ltr";const e=document.documentElement.getAttribute("dir");return e==="auto"||!e?window.getComputedStyle(document.documentElement).direction:e}function g2(e,t){const n={};return[e,t].forEach((r,o)=>{const s=o===1,u=s?"--mobile-offset":"--offset",c=s?l2:u2;function d(p){["top","right","bottom","left"].forEach(m=>{n[`${u}-${m}`]=typeof p=="number"?`${p}px`:p})}typeof r=="number"||typeof r=="string"?d(r):typeof r=="object"?["top","right","bottom","left"].forEach(p=>{r[p]===void 0?n[`${u}-${p}`]=c:n[`${u}-${p}`]=typeof r[p]=="number"?`${r[p]}px`:r[p]}):d(c)}),n}const v2=Y.forwardRef(function(t,n){const{id:r,invert:o,position:s="bottom-right",hotkey:u=["altKey","KeyT"],expand:c,closeButton:d,className:p,offset:m,mobileOffset:g,theme:y="light",richColors:A,duration:w,style:b,visibleToasts:x=s2,toastOptions:E,dir:S=Eb(),gap:F=d2,icons:R,containerAriaLabel:k="Notifications"}=t,[B,N]=Y.useState([]),P=Y.useMemo(()=>r?B.filter(T=>T.toasterId===r):B.filter(T=>!T.toasterId),[B,r]),U=Y.useMemo(()=>Array.from(new Set([s].concat(P.filter(T=>T.position).map(T=>T.position)))),[P,s]),[Q,$]=Y.useState([]),[q,V]=Y.useState(!1),[W,ae]=Y.useState(!1),[j,G]=Y.useState(y!=="system"?y:typeof window<"u"&&window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"),te=Y.useRef(null),ue=u.join("+").replace(/Key/g,"").replace(/Digit/g,""),ie=Y.useRef(null),z=Y.useRef(!1),O=Y.useCallback(T=>{N(J=>{var le;return(le=J.find(me=>me.id===T.id))!=null&&le.delete||ar.dismiss(T.id),J.filter(({id:me})=>me!==T.id)})},[]);return Y.useEffect(()=>ar.subscribe(T=>{if(T.dismiss){requestAnimationFrame(()=>{N(J=>J.map(le=>le.id===T.id?{...le,delete:!0}:le))});return}setTimeout(()=>{Cb.flushSync(()=>{N(J=>{const le=J.findIndex(me=>me.id===T.id);return le!==-1?[...J.slice(0,le),{...J[le],...T},...J.slice(le+1)]:[T,...J]})})})}),[B]),Y.useEffect(()=>{if(y!=="system"){G(y);return}if(y==="system"&&(window.matchMedia&&window.matchMedia("(prefers-color-scheme: dark)").matches?G("dark"):G("light")),typeof window>"u")return;const T=window.matchMedia("(prefers-color-scheme: dark)");try{T.addEventListener("change",({matches:J})=>{G(J?"dark":"light")})}catch{T.addListener(({matches:le})=>{try{G(le?"dark":"light")}catch(me){console.error(me)}})}},[y]),Y.useEffect(()=>{B.length<=1&&V(!1)},[B]),Y.useEffect(()=>{const T=J=>{var le;if(u.every(ye=>J[ye]||J.code===ye)){var de;V(!0),(de=te.current)==null||de.focus()}J.code==="Escape"&&(document.activeElement===te.current||(le=te.current)!=null&&le.contains(document.activeElement))&&V(!1)};return document.addEventListener("keydown",T),()=>document.removeEventListener("keydown",T)},[u]),Y.useEffect(()=>{if(te.current)return()=>{ie.current&&(ie.current.focus({preventScroll:!0}),ie.current=null,z.current=!1)}},[te.current]),Y.createElement("section",{ref:n,"aria-label":`${k} ${ue}`,tabIndex:-1,"aria-live":"polite","aria-relevant":"additions text","aria-atomic":"false",suppressHydrationWarning:!0},U.map((T,J)=>{var le;const[me,de]=T.split("-");return P.length?Y.createElement("ol",{key:T,dir:S==="auto"?Eb():S,tabIndex:-1,ref:te,className:p,"data-sonner-toaster":!0,"data-sonner-theme":j,"data-y-position":me,"data-x-position":de,style:{"--front-toast-height":`${((le=Q[0])==null?void 0:le.height)||0}px`,"--width":`${c2}px`,"--gap":`${F}px`,...b,...g2(m,g)},onBlur:ye=>{z.current&&!ye.currentTarget.contains(ye.relatedTarget)&&(z.current=!1,ie.current&&(ie.current.focus({preventScroll:!0}),ie.current=null))},onFocus:ye=>{ye.target instanceof HTMLElement&&ye.target.dataset.dismissible==="false"||z.current||(z.current=!0,ie.current=ye.relatedTarget)},onMouseEnter:()=>V(!0),onMouseMove:()=>V(!0),onMouseLeave:()=>{W||V(!1)},onDragEnd:()=>V(!1),onPointerDown:ye=>{ye.target instanceof HTMLElement&&ye.target.dataset.dismissible==="false"||ae(!0)},onPointerUp:()=>ae(!1)},P.filter(ye=>!ye.position&&J===0||ye.position===T).map((ye,Ce)=>{var Ke,Xe;return Y.createElement(p2,{key:ye.id,icons:R,index:Ce,toast:ye,defaultRichColors:A,duration:(Ke=E?.duration)!=null?Ke:w,className:E?.className,descriptionClassName:E?.descriptionClassName,invert:o,visibleToasts:x,closeButton:(Xe=E?.closeButton)!=null?Xe:d,interacting:W,position:T,style:E?.style,unstyled:E?.unstyled,classNames:E?.classNames,cancelButtonStyle:E?.cancelButtonStyle,actionButtonStyle:E?.actionButtonStyle,closeButtonAriaLabel:E?.closeButtonAriaLabel,removeToast:O,toasts:P.filter(st=>st.position==ye.position),heights:Q.filter(st=>st.position==ye.position),setHeights:$,expandByDefault:c,gap:F,expanded:q,swipeDirections:t.swipeDirections})})):null}))});var Sb=C.createContext(null);function Os(){return C.useContext(Sb)}var Db={common:{},light:{},dark:{}},cm=C.createContext({isDarkMode:!1,variables:Db,loader:null}),A2=({themeSettings:e,children:t})=>{let{variables:n,loader:r,mode:o,theme:s}=C.useMemo(()=>({variables:e?.variables??Db,loader:e?.loader??null,mode:e?.mode,theme:e?.theme??"default"}),[e]),[u,c]=C.useState(null);return C.useEffect(()=>{y7(n,o,s)},[n,o,s]),f.jsx(cm.Provider,{value:{isDarkMode:o==="dark",theme:s,variables:n,loader:r},children:f.jsxs(Sb.Provider,{value:u,children:[t,f.jsx("div",{className:"auth0-universal","data-theme":s,ref:c})]})})};function en(){let e=C.useContext(cm);if(!e)throw new Error("useTheme must be used within a ThemeProvider");return e}var dm=C.createContext({coreClient:null}),Un=()=>{let e=C.useContext(dm);if(!e)throw new Error("useCoreClient must be used within Auth0ComponentProvider");return e},Fb=({authDetails:e,i18nOptions:t})=>{let{authProxyUrl:n}=e,[r,o]=C.useState(null);return C.useEffect(()=>{(async()=>{try{let s=await JR(e,t);o(s)}catch(s){console.error(s)}})()},[n,t]),r};function X(...e){return EB(Yy(e))}var y2=Oo("inline-block h-8 w-8 animate-spin rounded-full border-2 border-transparent",{variants:{variant:{solid:"!border-t-current",dots:"animate-[spin_5s_linear_infinite] border-6 border-dotted border-current",pulse:"animate-pulse bg-current"},size:{sm:"size-4",md:"size-8",lg:"size-12"},colorScheme:{primary:"text-primary",foreground:"text-primary-foreground",muted:"text-muted-foreground"}},defaultVariants:{variant:"solid",size:"md",colorScheme:"primary"}});function dn({variant:e,size:t,colorScheme:n,className:r,...o}){return f.jsx("div",{className:X(y2({variant:e,size:t,colorScheme:n}),r),...o,children:f.jsx("span",{className:"sr-only",children:"Loading..."})})}var ja=({children:e,style:t})=>{let{theme:n="default",isDarkMode:r,variables:o}=C.useContext(cm),s=C.useMemo(()=>({...nm(o,r).variables,...t}),[o,r,t]);return f.jsx("div",{className:X("auth0-universal",r&&"dark"),"data-theme":n,style:s,children:e})},Sl={provider:"sonner",settings:{position:"top-right",closeButton:!0}},Rb={success:"text-success-foreground",error:"text-destructive-foreground",warning:"text-warning-foreground",info:"text-info-foreground"},Bb=["success","error","warning","info"],b2=1e3,Dl=0,x2=1e3,bd=new Set,_2=()=>{bd.size===0&&(Dl=0)},C2=e=>{e!=null?bd.delete(e):bd.clear(),_2()},Fl={...Sl},w2=e=>{if(!e){Fl={...Sl};return}if(Fl={...e},e.provider==="custom"){let{methods:t}=e,n=Object.keys(t);n.length===0&&console.warn("Auth0ComponentProvider: Custom toast provider specified but no custom methods provided"),n.forEach(r=>{typeof t[r]!="function"&&console.warn(`Auth0ComponentProvider: Custom toast method '${r}' is not a function`)})}},E2=(e,t)=>{let n=Rb[e];return f.jsx("span",{className:n,children:t})},S2=e=>{let t=Rb[e];return f.jsx(TB,{className:`h-4 w-4 ${t}`,"aria-hidden":"true"})},bt=({type:e,message:t,className:n,icon:r,data:o={}})=>{if(!t?.trim()){console.warn("showToast: Empty message provided");return}if(!Bb.includes(e)){console.error(`showToast: Invalid toast type '${e}'. Must be one of: ${Bb.join(", ")}`);return}if(Fl.provider==="custom"&&Fl.methods[e])try{return Fl.methods[e](t)}catch(p){console.error(`showToast: Error in custom ${e} method:`,p)}let s=E2(e,t),u=r||S2(e),c=b2+Dl;Dl+=1,Dl>=x2&&(Dl=0);let d={className:n,icon:u,style:{zIndex:c},onDismiss:p=>{C2(p)},...o};try{let p=Io[e](s,d);return p&&bd.add(p),p}catch(p){return console.error(`showToast: Error showing ${e} toast:`,p),Io(t)}},kb=C.createContext(null);function D2(){let e=C.useContext(kb);if(!e)throw new Error("useGateKeeperContext must be used within a GateKeeperProvider");return e}function Mb(e,t){if(typeof e=="function")return e(t);e!=null&&(e.current=t)}function Rl(...e){return t=>{let n=!1;const r=e.map(o=>{const s=Mb(o,t);return!n&&typeof s=="function"&&(n=!0),s});if(n)return()=>{for(let o=0;o{let{children:s,...u}=r;Nb(s)&&typeof xd=="function"&&(s=xd(s._payload));const c=C.Children.toArray(s),d=c.find(N2);if(d){const p=d.props.children,m=c.map(g=>g===d?C.Children.count(p)>1?C.Children.only(null):C.isValidElement(p)?p.props.children:null:g);return f.jsx(t,{...u,ref:o,children:C.isValidElement(p)?C.cloneElement(p,void 0,m):null})}return f.jsx(t,{...u,ref:o,children:s})});return n.displayName=`${e}.Slot`,n}var fm=B2("Slot");function k2(e){const t=C.forwardRef((n,r)=>{let{children:o,...s}=n;if(Nb(o)&&typeof xd=="function"&&(o=xd(o._payload)),C.isValidElement(o)){const u=j2(o),c=T2(s,o.props);return o.type!==C.Fragment&&(c.ref=r?Rl(r,u):u),C.cloneElement(o,c)}return C.Children.count(o)>1?C.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var M2=Symbol("radix.slottable");function N2(e){return C.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===M2}function T2(e,t){const n={...t};for(const r in t){const o=e[r],s=t[r];/^on[A-Z]/.test(r)?o&&s?n[r]=(...c)=>{const d=s(...c);return o(...c),d}:o&&(n[r]=o):r==="style"?n[r]={...o,...s}:r==="className"&&(n[r]=[o,s].filter(Boolean).join(" "))}return{...e,...n}}function j2(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}function _e(e,t,{checkForDefaultPrevented:n=!0}={}){return function(o){if(e?.(o),n===!1||!o.defaultPrevented)return t?.(o)}}function P2(e,t){const n=C.createContext(t),r=s=>{const{children:u,...c}=s,d=C.useMemo(()=>c,Object.values(c));return f.jsx(n.Provider,{value:d,children:u})};r.displayName=e+"Provider";function o(s){const u=C.useContext(n);if(u)return u;if(t!==void 0)return t;throw new Error(`\`${s}\` must be used within \`${e}\``)}return[r,o]}function Vn(e,t=[]){let n=[];function r(s,u){const c=C.createContext(u),d=n.length;n=[...n,u];const p=g=>{const{scope:y,children:A,...w}=g,b=y?.[e]?.[d]||c,x=C.useMemo(()=>w,Object.values(w));return f.jsx(b.Provider,{value:x,children:A})};p.displayName=s+"Provider";function m(g,y){const A=y?.[e]?.[d]||c,w=C.useContext(A);if(w)return w;if(u!==void 0)return u;throw new Error(`\`${g}\` must be used within \`${s}\``)}return[p,m]}const o=()=>{const s=n.map(u=>C.createContext(u));return function(c){const d=c?.[e]||s;return C.useMemo(()=>({[`__scope${e}`]:{...c,[e]:d}}),[c,d])}};return o.scopeName=e,[r,z2(o,...t)]}function z2(...e){const t=e[0];if(e.length===1)return t;const n=()=>{const r=e.map(o=>({useScope:o(),scopeName:o.scopeName}));return function(s){const u=r.reduce((c,{useScope:d,scopeName:p})=>{const g=d(s)[`__scope${p}`];return{...c,...g}},{});return C.useMemo(()=>({[`__scope${t.scopeName}`]:u}),[u])}};return n.scopeName=t.scopeName,n}var Bn=globalThis?.document?C.useLayoutEffect:()=>{},L2=dh[" useId ".trim().toString()]||(()=>{}),O2=0;function or(e){const[t,n]=C.useState(L2());return Bn(()=>{n(r=>r??String(O2++))},[e]),e||(t?`radix-${t}`:"")}var I2=dh[" useInsertionEffect ".trim().toString()]||Bn;function ir({prop:e,defaultProp:t,onChange:n=()=>{},caller:r}){const[o,s,u]=U2({defaultProp:t,onChange:n}),c=e!==void 0,d=c?e:o;{const m=C.useRef(e!==void 0);C.useEffect(()=>{const g=m.current;g!==c&&console.warn(`${r} is changing from ${g?"controlled":"uncontrolled"} to ${c?"controlled":"uncontrolled"}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`),m.current=c},[c,r])}const p=C.useCallback(m=>{if(c){const g=V2(m)?m(e):m;g!==e&&u.current?.(g)}else s(m)},[c,e,s,u]);return[d,p]}function U2({defaultProp:e,onChange:t}){const[n,r]=C.useState(e),o=C.useRef(n),s=C.useRef(t);return I2(()=>{s.current=t},[t]),C.useEffect(()=>{o.current!==n&&(s.current?.(n),o.current=n)},[n,o]),[n,r,s]}function V2(e){return typeof e=="function"}function Ui(e){const t=H2(e),n=C.forwardRef((r,o)=>{const{children:s,...u}=r,c=C.Children.toArray(s),d=c.find(G2);if(d){const p=d.props.children,m=c.map(g=>g===d?C.Children.count(p)>1?C.Children.only(null):C.isValidElement(p)?p.props.children:null:g);return f.jsx(t,{...u,ref:o,children:C.isValidElement(p)?C.cloneElement(p,void 0,m):null})}return f.jsx(t,{...u,ref:o,children:s})});return n.displayName=`${e}.Slot`,n}function H2(e){const t=C.forwardRef((n,r)=>{const{children:o,...s}=n;if(C.isValidElement(o)){const u=K2(o),c=Y2(s,o.props);return o.type!==C.Fragment&&(c.ref=r?Rl(r,u):u),C.cloneElement(o,c)}return C.Children.count(o)>1?C.Children.only(null):null});return t.displayName=`${e}.SlotClone`,t}var Tb=Symbol("radix.slottable");function Q2(e){const t=({children:n})=>f.jsx(f.Fragment,{children:n});return t.displayName=`${e}.Slottable`,t.__radixId=Tb,t}function G2(e){return C.isValidElement(e)&&typeof e.type=="function"&&"__radixId"in e.type&&e.type.__radixId===Tb}function Y2(e,t){const n={...t};for(const r in t){const o=e[r],s=t[r];/^on[A-Z]/.test(r)?o&&s?n[r]=(...c)=>{const d=s(...c);return o(...c),d}:o&&(n[r]=o):r==="style"?n[r]={...o,...s}:r==="className"&&(n[r]=[o,s].filter(Boolean).join(" "))}return{...e,...n}}function K2(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var q2=["a","button","div","form","h2","h3","img","input","label","li","nav","ol","p","select","span","svg","ul"],Te=q2.reduce((e,t)=>{const n=Ui(`Primitive.${t}`),r=C.forwardRef((o,s)=>{const{asChild:u,...c}=o,d=u?n:t;return typeof window<"u"&&(window[Symbol.for("radix-ui")]=!0),f.jsx(d,{...c,ref:s})});return r.displayName=`Primitive.${t}`,{...e,[t]:r}},{});function jb(e,t){e&&El.flushSync(()=>e.dispatchEvent(t))}function Pa(e){const t=C.useRef(e);return C.useEffect(()=>{t.current=e}),C.useMemo(()=>(...n)=>t.current?.(...n),[])}function Z2(e,t=globalThis?.document){const n=Pa(e);C.useEffect(()=>{const r=o=>{o.key==="Escape"&&n(o)};return t.addEventListener("keydown",r,{capture:!0}),()=>t.removeEventListener("keydown",r,{capture:!0})},[n,t])}var W2="DismissableLayer",hm="dismissableLayer.update",X2="dismissableLayer.pointerDownOutside",$2="dismissableLayer.focusOutside",Pb,zb=C.createContext({layers:new Set,layersWithOutsidePointerEventsDisabled:new Set,branches:new Set}),Is=C.forwardRef((e,t)=>{const{disableOutsidePointerEvents:n=!1,onEscapeKeyDown:r,onPointerDownOutside:o,onFocusOutside:s,onInteractOutside:u,onDismiss:c,...d}=e,p=C.useContext(zb),[m,g]=C.useState(null),y=m?.ownerDocument??globalThis?.document,[,A]=C.useState({}),w=nt(t,N=>g(N)),b=Array.from(p.layers),[x]=[...p.layersWithOutsidePointerEventsDisabled].slice(-1),E=b.indexOf(x),S=m?b.indexOf(m):-1,F=p.layersWithOutsidePointerEventsDisabled.size>0,R=S>=E,k=tk(N=>{const P=N.target,U=[...p.branches].some(Q=>Q.contains(P));!R||U||(o?.(N),u?.(N),N.defaultPrevented||c?.())},y),B=nk(N=>{const P=N.target;[...p.branches].some(Q=>Q.contains(P))||(s?.(N),u?.(N),N.defaultPrevented||c?.())},y);return Z2(N=>{S===p.layers.size-1&&(r?.(N),!N.defaultPrevented&&c&&(N.preventDefault(),c()))},y),C.useEffect(()=>{if(m)return n&&(p.layersWithOutsidePointerEventsDisabled.size===0&&(Pb=y.body.style.pointerEvents,y.body.style.pointerEvents="none"),p.layersWithOutsidePointerEventsDisabled.add(m)),p.layers.add(m),Lb(),()=>{n&&p.layersWithOutsidePointerEventsDisabled.size===1&&(y.body.style.pointerEvents=Pb)}},[m,y,n,p]),C.useEffect(()=>()=>{m&&(p.layers.delete(m),p.layersWithOutsidePointerEventsDisabled.delete(m),Lb())},[m,p]),C.useEffect(()=>{const N=()=>A({});return document.addEventListener(hm,N),()=>document.removeEventListener(hm,N)},[]),f.jsx(Te.div,{...d,ref:w,style:{pointerEvents:F?R?"auto":"none":void 0,...e.style},onFocusCapture:_e(e.onFocusCapture,B.onFocusCapture),onBlurCapture:_e(e.onBlurCapture,B.onBlurCapture),onPointerDownCapture:_e(e.onPointerDownCapture,k.onPointerDownCapture)})});Is.displayName=W2;var J2="DismissableLayerBranch",ek=C.forwardRef((e,t)=>{const n=C.useContext(zb),r=C.useRef(null),o=nt(t,r);return C.useEffect(()=>{const s=r.current;if(s)return n.branches.add(s),()=>{n.branches.delete(s)}},[n.branches]),f.jsx(Te.div,{...e,ref:o})});ek.displayName=J2;function tk(e,t=globalThis?.document){const n=Pa(e),r=C.useRef(!1),o=C.useRef(()=>{});return C.useEffect(()=>{const s=c=>{if(c.target&&!r.current){let d=function(){Ob(X2,n,p,{discrete:!0})};const p={originalEvent:c};c.pointerType==="touch"?(t.removeEventListener("click",o.current),o.current=d,t.addEventListener("click",o.current,{once:!0})):d()}else t.removeEventListener("click",o.current);r.current=!1},u=window.setTimeout(()=>{t.addEventListener("pointerdown",s)},0);return()=>{window.clearTimeout(u),t.removeEventListener("pointerdown",s),t.removeEventListener("click",o.current)}},[t,n]),{onPointerDownCapture:()=>r.current=!0}}function nk(e,t=globalThis?.document){const n=Pa(e),r=C.useRef(!1);return C.useEffect(()=>{const o=s=>{s.target&&!r.current&&Ob($2,n,{originalEvent:s},{discrete:!1})};return t.addEventListener("focusin",o),()=>t.removeEventListener("focusin",o)},[t,n]),{onFocusCapture:()=>r.current=!0,onBlurCapture:()=>r.current=!1}}function Lb(){const e=new CustomEvent(hm);document.dispatchEvent(e)}function Ob(e,t,n,{discrete:r}){const o=n.originalEvent.target,s=new CustomEvent(e,{bubbles:!1,cancelable:!0,detail:n});t&&o.addEventListener(e,t,{once:!0}),r?jb(o,s):o.dispatchEvent(s)}var mm="focusScope.autoFocusOnMount",pm="focusScope.autoFocusOnUnmount",Ib={bubbles:!1,cancelable:!0},rk="FocusScope",Bl=C.forwardRef((e,t)=>{const{loop:n=!1,trapped:r=!1,onMountAutoFocus:o,onUnmountAutoFocus:s,...u}=e,[c,d]=C.useState(null),p=Pa(o),m=Pa(s),g=C.useRef(null),y=nt(t,b=>d(b)),A=C.useRef({paused:!1,pause(){this.paused=!0},resume(){this.paused=!1}}).current;C.useEffect(()=>{if(r){let b=function(F){if(A.paused||!c)return;const R=F.target;c.contains(R)?g.current=R:Uo(g.current,{select:!0})},x=function(F){if(A.paused||!c)return;const R=F.relatedTarget;R!==null&&(c.contains(R)||Uo(g.current,{select:!0}))},E=function(F){if(document.activeElement===document.body)for(const k of F)k.removedNodes.length>0&&Uo(c)};document.addEventListener("focusin",b),document.addEventListener("focusout",x);const S=new MutationObserver(E);return c&&S.observe(c,{childList:!0,subtree:!0}),()=>{document.removeEventListener("focusin",b),document.removeEventListener("focusout",x),S.disconnect()}}},[r,c,A.paused]),C.useEffect(()=>{if(c){Hb.add(A);const b=document.activeElement;if(!c.contains(b)){const E=new CustomEvent(mm,Ib);c.addEventListener(mm,p),c.dispatchEvent(E),E.defaultPrevented||(ak(lk(Ub(c)),{select:!0}),document.activeElement===b&&Uo(c))}return()=>{c.removeEventListener(mm,p),setTimeout(()=>{const E=new CustomEvent(pm,Ib);c.addEventListener(pm,m),c.dispatchEvent(E),E.defaultPrevented||Uo(b??document.body,{select:!0}),c.removeEventListener(pm,m),Hb.remove(A)},0)}}},[c,p,m,A]);const w=C.useCallback(b=>{if(!n&&!r||A.paused)return;const x=b.key==="Tab"&&!b.altKey&&!b.ctrlKey&&!b.metaKey,E=document.activeElement;if(x&&E){const S=b.currentTarget,[F,R]=ok(S);F&&R?!b.shiftKey&&E===R?(b.preventDefault(),n&&Uo(F,{select:!0})):b.shiftKey&&E===F&&(b.preventDefault(),n&&Uo(R,{select:!0})):E===S&&b.preventDefault()}},[n,r,A.paused]);return f.jsx(Te.div,{tabIndex:-1,...u,ref:y,onKeyDown:w})});Bl.displayName=rk;function ak(e,{select:t=!1}={}){const n=document.activeElement;for(const r of e)if(Uo(r,{select:t}),document.activeElement!==n)return}function ok(e){const t=Ub(e),n=Vb(t,e),r=Vb(t.reverse(),e);return[n,r]}function Ub(e){const t=[],n=document.createTreeWalker(e,NodeFilter.SHOW_ELEMENT,{acceptNode:r=>{const o=r.tagName==="INPUT"&&r.type==="hidden";return r.disabled||r.hidden||o?NodeFilter.FILTER_SKIP:r.tabIndex>=0?NodeFilter.FILTER_ACCEPT:NodeFilter.FILTER_SKIP}});for(;n.nextNode();)t.push(n.currentNode);return t}function Vb(e,t){for(const n of e)if(!ik(n,{upTo:t}))return n}function ik(e,{upTo:t}){if(getComputedStyle(e).visibility==="hidden")return!0;for(;e;){if(t!==void 0&&e===t)return!1;if(getComputedStyle(e).display==="none")return!0;e=e.parentElement}return!1}function sk(e){return e instanceof HTMLInputElement&&"select"in e}function Uo(e,{select:t=!1}={}){if(e&&e.focus){const n=document.activeElement;e.focus({preventScroll:!0}),e!==n&&sk(e)&&t&&e.select()}}var Hb=uk();function uk(){let e=[];return{add(t){const n=e[0];t!==n&&n?.pause(),e=Qb(e,t),e.unshift(t)},remove(t){e=Qb(e,t),e[0]?.resume()}}}function Qb(e,t){const n=[...e],r=n.indexOf(t);return r!==-1&&n.splice(r,1),n}function lk(e){return e.filter(t=>t.tagName!=="A")}var ck="Portal",Us=C.forwardRef((e,t)=>{const{container:n,...r}=e,[o,s]=C.useState(!1);Bn(()=>s(!0),[]);const u=n||o&&globalThis?.document?.body;return u?Cb.createPortal(f.jsx(Te.div,{...r,ref:t}),u):null});Us.displayName=ck;function dk(e,t){return C.useReducer((n,r)=>t[n][r]??n,e)}var Hn=e=>{const{present:t,children:n}=e,r=fk(t),o=typeof n=="function"?n({present:r.isPresent}):C.Children.only(n),s=nt(r.ref,hk(o));return typeof n=="function"||r.isPresent?C.cloneElement(o,{ref:s}):null};Hn.displayName="Presence";function fk(e){const[t,n]=C.useState(),r=C.useRef(null),o=C.useRef(e),s=C.useRef("none"),u=e?"mounted":"unmounted",[c,d]=dk(u,{mounted:{UNMOUNT:"unmounted",ANIMATION_OUT:"unmountSuspended"},unmountSuspended:{MOUNT:"mounted",ANIMATION_END:"unmounted"},unmounted:{MOUNT:"mounted"}});return C.useEffect(()=>{const p=_d(r.current);s.current=c==="mounted"?p:"none"},[c]),Bn(()=>{const p=r.current,m=o.current;if(m!==e){const y=s.current,A=_d(p);e?d("MOUNT"):A==="none"||p?.display==="none"?d("UNMOUNT"):d(m&&y!==A?"ANIMATION_OUT":"UNMOUNT"),o.current=e}},[e,d]),Bn(()=>{if(t){let p;const m=t.ownerDocument.defaultView??window,g=A=>{const b=_d(r.current).includes(CSS.escape(A.animationName));if(A.target===t&&b&&(d("ANIMATION_END"),!o.current)){const x=t.style.animationFillMode;t.style.animationFillMode="forwards",p=m.setTimeout(()=>{t.style.animationFillMode==="forwards"&&(t.style.animationFillMode=x)})}},y=A=>{A.target===t&&(s.current=_d(r.current))};return t.addEventListener("animationstart",y),t.addEventListener("animationcancel",g),t.addEventListener("animationend",g),()=>{m.clearTimeout(p),t.removeEventListener("animationstart",y),t.removeEventListener("animationcancel",g),t.removeEventListener("animationend",g)}}else d("ANIMATION_END")},[t,d]),{isPresent:["mounted","unmountSuspended"].includes(c),ref:C.useCallback(p=>{r.current=p?getComputedStyle(p):null,n(p)},[])}}function _d(e){return e?.animationName||"none"}function hk(e){let t=Object.getOwnPropertyDescriptor(e.props,"ref")?.get,n=t&&"isReactWarning"in t&&t.isReactWarning;return n?e.ref:(t=Object.getOwnPropertyDescriptor(e,"ref")?.get,n=t&&"isReactWarning"in t&&t.isReactWarning,n?e.props.ref:e.props.ref||e.ref)}var gm=0;function Cd(){C.useEffect(()=>{const e=document.querySelectorAll("[data-radix-focus-guard]");return document.body.insertAdjacentElement("afterbegin",e[0]??Gb()),document.body.insertAdjacentElement("beforeend",e[1]??Gb()),gm++,()=>{gm===1&&document.querySelectorAll("[data-radix-focus-guard]").forEach(t=>t.remove()),gm--}},[])}function Gb(){const e=document.createElement("span");return e.setAttribute("data-radix-focus-guard",""),e.tabIndex=0,e.style.outline="none",e.style.opacity="0",e.style.position="fixed",e.style.pointerEvents="none",e}var za=function(){return za=Object.assign||function(t){for(var n,r=1,o=arguments.length;r"u")return Bk;var t=kk(e),n=document.documentElement.clientWidth,r=window.innerWidth;return{left:t[0],top:t[1],right:t[2],gap:Math.max(0,r-n+t[2]-t[0])}},Nk=Wb(),Vs="data-scroll-locked",Tk=function(e,t,n,r){var o=e.left,s=e.top,u=e.right,c=e.gap;return n===void 0&&(n="margin"),` + .`.concat(pk,` { + overflow: hidden `).concat(r,`; + padding-right: `).concat(c,"px ").concat(r,`; + } + body[`).concat(Vs,`] { + overflow: hidden `).concat(r,`; + overscroll-behavior: contain; + `).concat([t&&"position: relative ".concat(r,";"),n==="margin"&&` + padding-left: `.concat(o,`px; + padding-top: `).concat(s,`px; + padding-right: `).concat(u,`px; + margin-left:0; + margin-top:0; + margin-right: `).concat(c,"px ").concat(r,`; + `),n==="padding"&&"padding-right: ".concat(c,"px ").concat(r,";")].filter(Boolean).join(""),` + } + + .`).concat(wd,` { + right: `).concat(c,"px ").concat(r,`; + } + + .`).concat(Ed,` { + margin-right: `).concat(c,"px ").concat(r,`; + } + + .`).concat(wd," .").concat(wd,` { + right: 0 `).concat(r,`; + } + + .`).concat(Ed," .").concat(Ed,` { + margin-right: 0 `).concat(r,`; + } + + body[`).concat(Vs,`] { + `).concat(gk,": ").concat(c,`px; + } +`)},Xb=function(){var e=parseInt(document.body.getAttribute(Vs)||"0",10);return isFinite(e)?e:0},jk=function(){C.useEffect(function(){return document.body.setAttribute(Vs,(Xb()+1).toString()),function(){var e=Xb()-1;e<=0?document.body.removeAttribute(Vs):document.body.setAttribute(Vs,e.toString())}},[])},Pk=function(e){var t=e.noRelative,n=e.noImportant,r=e.gapMode,o=r===void 0?"margin":r;jk();var s=C.useMemo(function(){return Mk(o)},[o]);return C.createElement(Nk,{styles:Tk(s,!t,o,n?"":"!important")})},bm=!1;if(typeof window<"u")try{var Dd=Object.defineProperty({},"passive",{get:function(){return bm=!0,!0}});window.addEventListener("test",Dd,Dd),window.removeEventListener("test",Dd,Dd)}catch{bm=!1}var Hs=bm?{passive:!1}:!1,zk=function(e){return e.tagName==="TEXTAREA"},$b=function(e,t){if(!(e instanceof Element))return!1;var n=window.getComputedStyle(e);return n[t]!=="hidden"&&!(n.overflowY===n.overflowX&&!zk(e)&&n[t]==="visible")},Lk=function(e){return $b(e,"overflowY")},Ok=function(e){return $b(e,"overflowX")},Jb=function(e,t){var n=t.ownerDocument,r=t;do{typeof ShadowRoot<"u"&&r instanceof ShadowRoot&&(r=r.host);var o=ex(e,r);if(o){var s=tx(e,r),u=s[1],c=s[2];if(u>c)return!0}r=r.parentNode}while(r&&r!==n.body);return!1},Ik=function(e){var t=e.scrollTop,n=e.scrollHeight,r=e.clientHeight;return[t,n,r]},Uk=function(e){var t=e.scrollLeft,n=e.scrollWidth,r=e.clientWidth;return[t,n,r]},ex=function(e,t){return e==="v"?Lk(t):Ok(t)},tx=function(e,t){return e==="v"?Ik(t):Uk(t)},Vk=function(e,t){return e==="h"&&t==="rtl"?-1:1},Hk=function(e,t,n,r,o){var s=Vk(e,window.getComputedStyle(t).direction),u=s*r,c=n.target,d=t.contains(c),p=!1,m=u>0,g=0,y=0;do{if(!c)break;var A=tx(e,c),w=A[0],b=A[1],x=A[2],E=b-x-s*w;(w||E)&&ex(e,c)&&(g+=E,y+=w);var S=c.parentNode;c=S&&S.nodeType===Node.DOCUMENT_FRAGMENT_NODE?S.host:S}while(!d&&c!==document.body||d&&(t.contains(c)||t===c));return(m&&Math.abs(g)<1||!m&&Math.abs(y)<1)&&(p=!0),p},Fd=function(e){return"changedTouches"in e?[e.changedTouches[0].clientX,e.changedTouches[0].clientY]:[0,0]},nx=function(e){return[e.deltaX,e.deltaY]},rx=function(e){return e&&"current"in e?e.current:e},Qk=function(e,t){return e[0]===t[0]&&e[1]===t[1]},Gk=function(e){return` + .block-interactivity-`.concat(e,` {pointer-events: none;} + .allow-interactivity-`).concat(e,` {pointer-events: all;} +`)},Yk=0,Qs=[];function Kk(e){var t=C.useRef([]),n=C.useRef([0,0]),r=C.useRef(),o=C.useState(Yk++)[0],s=C.useState(Wb)[0],u=C.useRef(e);C.useEffect(function(){u.current=e},[e]),C.useEffect(function(){if(e.inert){document.body.classList.add("block-interactivity-".concat(o));var b=mk([e.lockRef.current],(e.shards||[]).map(rx),!0).filter(Boolean);return b.forEach(function(x){return x.classList.add("allow-interactivity-".concat(o))}),function(){document.body.classList.remove("block-interactivity-".concat(o)),b.forEach(function(x){return x.classList.remove("allow-interactivity-".concat(o))})}}},[e.inert,e.lockRef.current,e.shards]);var c=C.useCallback(function(b,x){if("touches"in b&&b.touches.length===2||b.type==="wheel"&&b.ctrlKey)return!u.current.allowPinchZoom;var E=Fd(b),S=n.current,F="deltaX"in b?b.deltaX:S[0]-E[0],R="deltaY"in b?b.deltaY:S[1]-E[1],k,B=b.target,N=Math.abs(F)>Math.abs(R)?"h":"v";if("touches"in b&&N==="h"&&B.type==="range")return!1;var P=window.getSelection(),U=P&&P.anchorNode,Q=U?U===B||U.contains(B):!1;if(Q)return!1;var $=Jb(N,B);if(!$)return!0;if($?k=N:(k=N==="v"?"h":"v",$=Jb(N,B)),!$)return!1;if(!r.current&&"changedTouches"in b&&(F||R)&&(r.current=k),!k)return!0;var q=r.current||k;return Hk(q,x,b,q==="h"?F:R)},[]),d=C.useCallback(function(b){var x=b;if(!(!Qs.length||Qs[Qs.length-1]!==s)){var E="deltaY"in x?nx(x):Fd(x),S=t.current.filter(function(k){return k.name===x.type&&(k.target===x.target||x.target===k.shadowParent)&&Qk(k.delta,E)})[0];if(S&&S.should){x.cancelable&&x.preventDefault();return}if(!S){var F=(u.current.shards||[]).map(rx).filter(Boolean).filter(function(k){return k.contains(x.target)}),R=F.length>0?c(x,F[0]):!u.current.noIsolation;R&&x.cancelable&&x.preventDefault()}}},[]),p=C.useCallback(function(b,x,E,S){var F={name:b,delta:x,target:E,should:S,shadowParent:qk(E)};t.current.push(F),setTimeout(function(){t.current=t.current.filter(function(R){return R!==F})},1)},[]),m=C.useCallback(function(b){n.current=Fd(b),r.current=void 0},[]),g=C.useCallback(function(b){p(b.type,nx(b),b.target,c(b,e.lockRef.current))},[]),y=C.useCallback(function(b){p(b.type,Fd(b),b.target,c(b,e.lockRef.current))},[]);C.useEffect(function(){return Qs.push(s),e.setCallbacks({onScrollCapture:g,onWheelCapture:g,onTouchMoveCapture:y}),document.addEventListener("wheel",d,Hs),document.addEventListener("touchmove",d,Hs),document.addEventListener("touchstart",m,Hs),function(){Qs=Qs.filter(function(b){return b!==s}),document.removeEventListener("wheel",d,Hs),document.removeEventListener("touchmove",d,Hs),document.removeEventListener("touchstart",m,Hs)}},[]);var A=e.removeScrollBar,w=e.inert;return C.createElement(C.Fragment,null,w?C.createElement(s,{styles:Gk(o)}):null,A?C.createElement(Pk,{noRelative:e.noRelative,gapMode:e.gapMode}):null)}function qk(e){for(var t=null;e!==null;)e instanceof ShadowRoot&&(t=e.host,e=e.host),e=e.parentNode;return t}const Zk=Ck(Zb,Kk);var kl=C.forwardRef(function(e,t){return C.createElement(Sd,za({},e,{ref:t,sideCar:Zk}))});kl.classNames=Sd.classNames;var Wk=function(e){if(typeof document>"u")return null;var t=Array.isArray(e)?e[0]:e;return t.ownerDocument.body},Gs=new WeakMap,Rd=new WeakMap,Bd={},xm=0,ax=function(e){return e&&(e.host||ax(e.parentNode))},Xk=function(e,t){return t.map(function(n){if(e.contains(n))return n;var r=ax(n);return r&&e.contains(r)?r:(console.error("aria-hidden",n,"in not contained inside",e,". Doing nothing"),null)}).filter(function(n){return!!n})},$k=function(e,t,n,r){var o=Xk(t,Array.isArray(e)?e:[e]);Bd[n]||(Bd[n]=new WeakMap);var s=Bd[n],u=[],c=new Set,d=new Set(o),p=function(g){!g||c.has(g)||(c.add(g),p(g.parentNode))};o.forEach(p);var m=function(g){!g||d.has(g)||Array.prototype.forEach.call(g.children,function(y){if(c.has(y))m(y);else try{var A=y.getAttribute(r),w=A!==null&&A!=="false",b=(Gs.get(y)||0)+1,x=(s.get(y)||0)+1;Gs.set(y,b),s.set(y,x),u.push(y),b===1&&w&&Rd.set(y,!0),x===1&&y.setAttribute(n,"true"),w||y.setAttribute(r,"true")}catch(E){console.error("aria-hidden: cannot operate on ",y,E)}})};return m(t),c.clear(),xm++,function(){u.forEach(function(g){var y=Gs.get(g)-1,A=s.get(g)-1;Gs.set(g,y),s.set(g,A),y||(Rd.has(g)||g.removeAttribute(r),Rd.delete(g)),A||g.removeAttribute(n)}),xm--,xm||(Gs=new WeakMap,Gs=new WeakMap,Rd=new WeakMap,Bd={})}},kd=function(e,t,n){n===void 0&&(n="data-aria-hidden");var r=Array.from(Array.isArray(e)?e:[e]),o=Wk(e);return o?(r.push.apply(r,Array.from(o.querySelectorAll("[aria-live], script"))),$k(r,o,n,"aria-hidden")):function(){return null}},Md="Dialog",[ox]=Vn(Md),[Jk,ha]=ox(Md),ix=e=>{const{__scopeDialog:t,children:n,open:r,defaultOpen:o,onOpenChange:s,modal:u=!0}=e,c=C.useRef(null),d=C.useRef(null),[p,m]=ir({prop:r,defaultProp:o??!1,onChange:s,caller:Md});return f.jsx(Jk,{scope:t,triggerRef:c,contentRef:d,contentId:or(),titleId:or(),descriptionId:or(),open:p,onOpenChange:m,onOpenToggle:C.useCallback(()=>m(g=>!g),[m]),modal:u,children:n})};ix.displayName=Md;var sx="DialogTrigger",eM=C.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=ha(sx,n),s=nt(t,o.triggerRef);return f.jsx(Te.button,{type:"button","aria-haspopup":"dialog","aria-expanded":o.open,"aria-controls":o.contentId,"data-state":wm(o.open),...r,ref:s,onClick:_e(e.onClick,o.onOpenToggle)})});eM.displayName=sx;var _m="DialogPortal",[tM,ux]=ox(_m,{forceMount:void 0}),lx=e=>{const{__scopeDialog:t,forceMount:n,children:r,container:o}=e,s=ha(_m,t);return f.jsx(tM,{scope:t,forceMount:n,children:C.Children.map(r,u=>f.jsx(Hn,{present:n||s.open,children:f.jsx(Us,{asChild:!0,container:o,children:u})}))})};lx.displayName=_m;var Nd="DialogOverlay",cx=C.forwardRef((e,t)=>{const n=ux(Nd,e.__scopeDialog),{forceMount:r=n.forceMount,...o}=e,s=ha(Nd,e.__scopeDialog);return s.modal?f.jsx(Hn,{present:r||s.open,children:f.jsx(rM,{...o,ref:t})}):null});cx.displayName=Nd;var nM=Ui("DialogOverlay.RemoveScroll"),rM=C.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=ha(Nd,n);return f.jsx(kl,{as:nM,allowPinchZoom:!0,shards:[o.contentRef],children:f.jsx(Te.div,{"data-state":wm(o.open),...r,ref:t,style:{pointerEvents:"auto",...r.style}})})}),Vi="DialogContent",dx=C.forwardRef((e,t)=>{const n=ux(Vi,e.__scopeDialog),{forceMount:r=n.forceMount,...o}=e,s=ha(Vi,e.__scopeDialog);return f.jsx(Hn,{present:r||s.open,children:s.modal?f.jsx(aM,{...o,ref:t}):f.jsx(oM,{...o,ref:t})})});dx.displayName=Vi;var aM=C.forwardRef((e,t)=>{const n=ha(Vi,e.__scopeDialog),r=C.useRef(null),o=nt(t,n.contentRef,r);return C.useEffect(()=>{const s=r.current;if(s)return kd(s)},[]),f.jsx(fx,{...e,ref:o,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:_e(e.onCloseAutoFocus,s=>{s.preventDefault(),n.triggerRef.current?.focus()}),onPointerDownOutside:_e(e.onPointerDownOutside,s=>{const u=s.detail.originalEvent,c=u.button===0&&u.ctrlKey===!0;(u.button===2||c)&&s.preventDefault()}),onFocusOutside:_e(e.onFocusOutside,s=>s.preventDefault())})}),oM=C.forwardRef((e,t)=>{const n=ha(Vi,e.__scopeDialog),r=C.useRef(!1),o=C.useRef(!1);return f.jsx(fx,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:s=>{e.onCloseAutoFocus?.(s),s.defaultPrevented||(r.current||n.triggerRef.current?.focus(),s.preventDefault()),r.current=!1,o.current=!1},onInteractOutside:s=>{e.onInteractOutside?.(s),s.defaultPrevented||(r.current=!0,s.detail.originalEvent.type==="pointerdown"&&(o.current=!0));const u=s.target;n.triggerRef.current?.contains(u)&&s.preventDefault(),s.detail.originalEvent.type==="focusin"&&o.current&&s.preventDefault()}})}),fx=C.forwardRef((e,t)=>{const{__scopeDialog:n,trapFocus:r,onOpenAutoFocus:o,onCloseAutoFocus:s,...u}=e,c=ha(Vi,n),d=C.useRef(null),p=nt(t,d);return Cd(),f.jsxs(f.Fragment,{children:[f.jsx(Bl,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:o,onUnmountAutoFocus:s,children:f.jsx(Is,{role:"dialog",id:c.contentId,"aria-describedby":c.descriptionId,"aria-labelledby":c.titleId,"data-state":wm(c.open),...u,ref:p,onDismiss:()=>c.onOpenChange(!1)})}),f.jsxs(f.Fragment,{children:[f.jsx(iM,{titleId:c.titleId}),f.jsx(uM,{contentRef:d,descriptionId:c.descriptionId})]})]})}),Cm="DialogTitle",hx=C.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=ha(Cm,n);return f.jsx(Te.h2,{id:o.titleId,...r,ref:t})});hx.displayName=Cm;var mx="DialogDescription",px=C.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=ha(mx,n);return f.jsx(Te.p,{id:o.descriptionId,...r,ref:t})});px.displayName=mx;var gx="DialogClose",vx=C.forwardRef((e,t)=>{const{__scopeDialog:n,...r}=e,o=ha(gx,n);return f.jsx(Te.button,{type:"button",...r,ref:t,onClick:_e(e.onClick,()=>o.onOpenChange(!1))})});vx.displayName=gx;function wm(e){return e?"open":"closed"}var Ax="DialogTitleWarning",[MG,yx]=P2(Ax,{contentName:Vi,titleName:Cm,docsSlug:"dialog"}),iM=({titleId:e})=>{const t=yx(Ax),n=`\`${t.contentName}\` requires a \`${t.titleName}\` for the component to be accessible for screen reader users. + +If you want to hide the \`${t.titleName}\`, you can wrap it with our VisuallyHidden component. + +For more information, see https://radix-ui.com/primitives/docs/components/${t.docsSlug}`;return C.useEffect(()=>{e&&(document.getElementById(e)||console.error(n))},[n,e]),null},sM="DialogDescriptionWarning",uM=({contentRef:e,descriptionId:t})=>{const r=`Warning: Missing \`Description\` or \`aria-describedby={undefined}\` for {${yx(sM).contentName}}.`;return C.useEffect(()=>{const o=e.current?.getAttribute("aria-describedby");t&&o&&(document.getElementById(t)||console.warn(r))},[r,e,t]),null},lM=ix,cM=lx,dM=cx,fM=dx,hM=hx,mM=px,pM=vx;const gM=["top","right","bottom","left"],Vo=Math.min,yr=Math.max,Td=Math.round,jd=Math.floor,La=e=>({x:e,y:e}),vM={left:"right",right:"left",bottom:"top",top:"bottom"};function Em(e,t,n){return yr(e,Vo(t,n))}function so(e,t){return typeof e=="function"?e(t):e}function uo(e){return e.split("-")[0]}function Ys(e){return e.split("-")[1]}function Sm(e){return e==="x"?"y":"x"}function Dm(e){return e==="y"?"height":"width"}function Oa(e){const t=e[0];return t==="t"||t==="b"?"y":"x"}function Fm(e){return Sm(Oa(e))}function AM(e,t,n){n===void 0&&(n=!1);const r=Ys(e),o=Fm(e),s=Dm(o);let u=o==="x"?r===(n?"end":"start")?"right":"left":r==="start"?"bottom":"top";return t.reference[s]>t.floating[s]&&(u=Pd(u)),[u,Pd(u)]}function yM(e){const t=Pd(e);return[Rm(e),t,Rm(t)]}function Rm(e){return e.includes("start")?e.replace("start","end"):e.replace("end","start")}const bx=["left","right"],xx=["right","left"],bM=["top","bottom"],xM=["bottom","top"];function _M(e,t,n){switch(e){case"top":case"bottom":return n?t?xx:bx:t?bx:xx;case"left":case"right":return t?bM:xM;default:return[]}}function CM(e,t,n,r){const o=Ys(e);let s=_M(uo(e),n==="start",r);return o&&(s=s.map(u=>u+"-"+o),t&&(s=s.concat(s.map(Rm)))),s}function Pd(e){const t=uo(e);return vM[t]+e.slice(t.length)}function wM(e){return{top:0,right:0,bottom:0,left:0,...e}}function _x(e){return typeof e!="number"?wM(e):{top:e,right:e,bottom:e,left:e}}function zd(e){const{x:t,y:n,width:r,height:o}=e;return{width:r,height:o,top:n,left:t,right:t+r,bottom:n+o,x:t,y:n}}function Cx(e,t,n){let{reference:r,floating:o}=e;const s=Oa(t),u=Fm(t),c=Dm(u),d=uo(t),p=s==="y",m=r.x+r.width/2-o.width/2,g=r.y+r.height/2-o.height/2,y=r[c]/2-o[c]/2;let A;switch(d){case"top":A={x:m,y:r.y-o.height};break;case"bottom":A={x:m,y:r.y+r.height};break;case"right":A={x:r.x+r.width,y:g};break;case"left":A={x:r.x-o.width,y:g};break;default:A={x:r.x,y:r.y}}switch(Ys(t)){case"start":A[u]-=y*(n&&p?-1:1);break;case"end":A[u]+=y*(n&&p?-1:1);break}return A}async function EM(e,t){var n;t===void 0&&(t={});const{x:r,y:o,platform:s,rects:u,elements:c,strategy:d}=e,{boundary:p="clippingAncestors",rootBoundary:m="viewport",elementContext:g="floating",altBoundary:y=!1,padding:A=0}=so(t,e),w=_x(A),x=c[y?g==="floating"?"reference":"floating":g],E=zd(await s.getClippingRect({element:(n=await(s.isElement==null?void 0:s.isElement(x)))==null||n?x:x.contextElement||await(s.getDocumentElement==null?void 0:s.getDocumentElement(c.floating)),boundary:p,rootBoundary:m,strategy:d})),S=g==="floating"?{x:r,y:o,width:u.floating.width,height:u.floating.height}:u.reference,F=await(s.getOffsetParent==null?void 0:s.getOffsetParent(c.floating)),R=await(s.isElement==null?void 0:s.isElement(F))?await(s.getScale==null?void 0:s.getScale(F))||{x:1,y:1}:{x:1,y:1},k=zd(s.convertOffsetParentRelativeRectToViewportRelativeRect?await s.convertOffsetParentRelativeRectToViewportRelativeRect({elements:c,rect:S,offsetParent:F,strategy:d}):S);return{top:(E.top-k.top+w.top)/R.y,bottom:(k.bottom-E.bottom+w.bottom)/R.y,left:(E.left-k.left+w.left)/R.x,right:(k.right-E.right+w.right)/R.x}}const SM=50,DM=async(e,t,n)=>{const{placement:r="bottom",strategy:o="absolute",middleware:s=[],platform:u}=n,c=u.detectOverflow?u:{...u,detectOverflow:EM},d=await(u.isRTL==null?void 0:u.isRTL(t));let p=await u.getElementRects({reference:e,floating:t,strategy:o}),{x:m,y:g}=Cx(p,r,d),y=r,A=0;const w={};for(let b=0;b({name:"arrow",options:e,async fn(t){const{x:n,y:r,placement:o,rects:s,platform:u,elements:c,middlewareData:d}=t,{element:p,padding:m=0}=so(e,t)||{};if(p==null)return{};const g=_x(m),y={x:n,y:r},A=Fm(o),w=Dm(A),b=await u.getDimensions(p),x=A==="y",E=x?"top":"left",S=x?"bottom":"right",F=x?"clientHeight":"clientWidth",R=s.reference[w]+s.reference[A]-y[A]-s.floating[w],k=y[A]-s.reference[A],B=await(u.getOffsetParent==null?void 0:u.getOffsetParent(p));let N=B?B[F]:0;(!N||!await(u.isElement==null?void 0:u.isElement(B)))&&(N=c.floating[F]||s.floating[w]);const P=R/2-k/2,U=N/2-b[w]/2-1,Q=Vo(g[E],U),$=Vo(g[S],U),q=Q,V=N-b[w]-$,W=N/2-b[w]/2+P,ae=Em(q,W,V),j=!d.arrow&&Ys(o)!=null&&W!==ae&&s.reference[w]/2-(WW<=0)){var $,q;const W=((($=s.flip)==null?void 0:$.index)||0)+1,ae=N[W];if(ae&&(!(g==="alignment"?S!==Oa(ae):!1)||Q.every(te=>Oa(te.placement)===S?te.overflows[0]>0:!0)))return{data:{index:W,overflows:Q},reset:{placement:ae}};let j=(q=Q.filter(G=>G.overflows[0]<=0).sort((G,te)=>G.overflows[1]-te.overflows[1])[0])==null?void 0:q.placement;if(!j)switch(A){case"bestFit":{var V;const G=(V=Q.filter(te=>{if(B){const ue=Oa(te.placement);return ue===S||ue==="y"}return!0}).map(te=>[te.placement,te.overflows.filter(ue=>ue>0).reduce((ue,ie)=>ue+ie,0)]).sort((te,ue)=>te[1]-ue[1])[0])==null?void 0:V[0];G&&(j=G);break}case"initialPlacement":j=c;break}if(o!==j)return{reset:{placement:j}}}return{}}}};function wx(e,t){return{top:e.top-t.height,right:e.right-t.width,bottom:e.bottom-t.height,left:e.left-t.width}}function Ex(e){return gM.some(t=>e[t]>=0)}const BM=function(e){return e===void 0&&(e={}),{name:"hide",options:e,async fn(t){const{rects:n,platform:r}=t,{strategy:o="referenceHidden",...s}=so(e,t);switch(o){case"referenceHidden":{const u=await r.detectOverflow(t,{...s,elementContext:"reference"}),c=wx(u,n.reference);return{data:{referenceHiddenOffsets:c,referenceHidden:Ex(c)}}}case"escaped":{const u=await r.detectOverflow(t,{...s,altBoundary:!0}),c=wx(u,n.floating);return{data:{escapedOffsets:c,escaped:Ex(c)}}}default:return{}}}}},Sx=new Set(["left","top"]);async function kM(e,t){const{placement:n,platform:r,elements:o}=e,s=await(r.isRTL==null?void 0:r.isRTL(o.floating)),u=uo(n),c=Ys(n),d=Oa(n)==="y",p=Sx.has(u)?-1:1,m=s&&d?-1:1,g=so(t,e);let{mainAxis:y,crossAxis:A,alignmentAxis:w}=typeof g=="number"?{mainAxis:g,crossAxis:0,alignmentAxis:null}:{mainAxis:g.mainAxis||0,crossAxis:g.crossAxis||0,alignmentAxis:g.alignmentAxis};return c&&typeof w=="number"&&(A=c==="end"?w*-1:w),d?{x:A*m,y:y*p}:{x:y*p,y:A*m}}const MM=function(e){return e===void 0&&(e=0),{name:"offset",options:e,async fn(t){var n,r;const{x:o,y:s,placement:u,middlewareData:c}=t,d=await kM(t,e);return u===((n=c.offset)==null?void 0:n.placement)&&(r=c.arrow)!=null&&r.alignmentOffset?{}:{x:o+d.x,y:s+d.y,data:{...d,placement:u}}}}},NM=function(e){return e===void 0&&(e={}),{name:"shift",options:e,async fn(t){const{x:n,y:r,placement:o,platform:s}=t,{mainAxis:u=!0,crossAxis:c=!1,limiter:d={fn:E=>{let{x:S,y:F}=E;return{x:S,y:F}}},...p}=so(e,t),m={x:n,y:r},g=await s.detectOverflow(t,p),y=Oa(uo(o)),A=Sm(y);let w=m[A],b=m[y];if(u){const E=A==="y"?"top":"left",S=A==="y"?"bottom":"right",F=w+g[E],R=w-g[S];w=Em(F,w,R)}if(c){const E=y==="y"?"top":"left",S=y==="y"?"bottom":"right",F=b+g[E],R=b-g[S];b=Em(F,b,R)}const x=d.fn({...t,[A]:w,[y]:b});return{...x,data:{x:x.x-n,y:x.y-r,enabled:{[A]:u,[y]:c}}}}}},TM=function(e){return e===void 0&&(e={}),{options:e,fn(t){const{x:n,y:r,placement:o,rects:s,middlewareData:u}=t,{offset:c=0,mainAxis:d=!0,crossAxis:p=!0}=so(e,t),m={x:n,y:r},g=Oa(o),y=Sm(g);let A=m[y],w=m[g];const b=so(c,t),x=typeof b=="number"?{mainAxis:b,crossAxis:0}:{mainAxis:0,crossAxis:0,...b};if(d){const F=y==="y"?"height":"width",R=s.reference[y]-s.floating[F]+x.mainAxis,k=s.reference[y]+s.reference[F]-x.mainAxis;Ak&&(A=k)}if(p){var E,S;const F=y==="y"?"width":"height",R=Sx.has(uo(o)),k=s.reference[g]-s.floating[F]+(R&&((E=u.offset)==null?void 0:E[g])||0)+(R?0:x.crossAxis),B=s.reference[g]+s.reference[F]+(R?0:((S=u.offset)==null?void 0:S[g])||0)-(R?x.crossAxis:0);wB&&(w=B)}return{[y]:A,[g]:w}}}},jM=function(e){return e===void 0&&(e={}),{name:"size",options:e,async fn(t){var n,r;const{placement:o,rects:s,platform:u,elements:c}=t,{apply:d=()=>{},...p}=so(e,t),m=await u.detectOverflow(t,p),g=uo(o),y=Ys(o),A=Oa(o)==="y",{width:w,height:b}=s.floating;let x,E;g==="top"||g==="bottom"?(x=g,E=y===(await(u.isRTL==null?void 0:u.isRTL(c.floating))?"start":"end")?"left":"right"):(E=g,x=y==="end"?"top":"bottom");const S=b-m.top-m.bottom,F=w-m.left-m.right,R=Vo(b-m[x],S),k=Vo(w-m[E],F),B=!t.middlewareData.shift;let N=R,P=k;if((n=t.middlewareData.shift)!=null&&n.enabled.x&&(P=F),(r=t.middlewareData.shift)!=null&&r.enabled.y&&(N=S),B&&!y){const Q=yr(m.left,0),$=yr(m.right,0),q=yr(m.top,0),V=yr(m.bottom,0);A?P=w-2*(Q!==0||$!==0?Q+$:yr(m.left,m.right)):N=b-2*(q!==0||V!==0?q+V:yr(m.top,m.bottom))}await d({...t,availableWidth:P,availableHeight:N});const U=await u.getDimensions(c.floating);return w!==U.width||b!==U.height?{reset:{rects:!0}}:{}}}};function Ld(){return typeof window<"u"}function Ks(e){return Dx(e)?(e.nodeName||"").toLowerCase():"#document"}function br(e){var t;return(e==null||(t=e.ownerDocument)==null?void 0:t.defaultView)||window}function Ia(e){var t;return(t=(Dx(e)?e.ownerDocument:e.document)||window.document)==null?void 0:t.documentElement}function Dx(e){return Ld()?e instanceof Node||e instanceof br(e).Node:!1}function ma(e){return Ld()?e instanceof Element||e instanceof br(e).Element:!1}function lo(e){return Ld()?e instanceof HTMLElement||e instanceof br(e).HTMLElement:!1}function Fx(e){return!Ld()||typeof ShadowRoot>"u"?!1:e instanceof ShadowRoot||e instanceof br(e).ShadowRoot}function Ml(e){const{overflow:t,overflowX:n,overflowY:r,display:o}=pa(e);return/auto|scroll|overlay|hidden|clip/.test(t+r+n)&&o!=="inline"&&o!=="contents"}function PM(e){return/^(table|td|th)$/.test(Ks(e))}function Od(e){try{if(e.matches(":popover-open"))return!0}catch{}try{return e.matches(":modal")}catch{return!1}}const zM=/transform|translate|scale|rotate|perspective|filter/,LM=/paint|layout|strict|content/,Hi=e=>!!e&&e!=="none";let Bm;function km(e){const t=ma(e)?pa(e):e;return Hi(t.transform)||Hi(t.translate)||Hi(t.scale)||Hi(t.rotate)||Hi(t.perspective)||!Mm()&&(Hi(t.backdropFilter)||Hi(t.filter))||zM.test(t.willChange||"")||LM.test(t.contain||"")}function OM(e){let t=Ho(e);for(;lo(t)&&!qs(t);){if(km(t))return t;if(Od(t))return null;t=Ho(t)}return null}function Mm(){return Bm==null&&(Bm=typeof CSS<"u"&&CSS.supports&&CSS.supports("-webkit-backdrop-filter","none")),Bm}function qs(e){return/^(html|body|#document)$/.test(Ks(e))}function pa(e){return br(e).getComputedStyle(e)}function Id(e){return ma(e)?{scrollLeft:e.scrollLeft,scrollTop:e.scrollTop}:{scrollLeft:e.scrollX,scrollTop:e.scrollY}}function Ho(e){if(Ks(e)==="html")return e;const t=e.assignedSlot||e.parentNode||Fx(e)&&e.host||Ia(e);return Fx(t)?t.host:t}function Rx(e){const t=Ho(e);return qs(t)?e.ownerDocument?e.ownerDocument.body:e.body:lo(t)&&Ml(t)?t:Rx(t)}function Nl(e,t,n){var r;t===void 0&&(t=[]),n===void 0&&(n=!0);const o=Rx(e),s=o===((r=e.ownerDocument)==null?void 0:r.body),u=br(o);if(s){const c=Nm(u);return t.concat(u,u.visualViewport||[],Ml(o)?o:[],c&&n?Nl(c):[])}else return t.concat(o,Nl(o,[],n))}function Nm(e){return e.parent&&Object.getPrototypeOf(e.parent)?e.frameElement:null}function Bx(e){const t=pa(e);let n=parseFloat(t.width)||0,r=parseFloat(t.height)||0;const o=lo(e),s=o?e.offsetWidth:n,u=o?e.offsetHeight:r,c=Td(n)!==s||Td(r)!==u;return c&&(n=s,r=u),{width:n,height:r,$:c}}function Tm(e){return ma(e)?e:e.contextElement}function Zs(e){const t=Tm(e);if(!lo(t))return La(1);const n=t.getBoundingClientRect(),{width:r,height:o,$:s}=Bx(t);let u=(s?Td(n.width):n.width)/r,c=(s?Td(n.height):n.height)/o;return(!u||!Number.isFinite(u))&&(u=1),(!c||!Number.isFinite(c))&&(c=1),{x:u,y:c}}const IM=La(0);function kx(e){const t=br(e);return!Mm()||!t.visualViewport?IM:{x:t.visualViewport.offsetLeft,y:t.visualViewport.offsetTop}}function UM(e,t,n){return t===void 0&&(t=!1),!n||t&&n!==br(e)?!1:t}function Qi(e,t,n,r){t===void 0&&(t=!1),n===void 0&&(n=!1);const o=e.getBoundingClientRect(),s=Tm(e);let u=La(1);t&&(r?ma(r)&&(u=Zs(r)):u=Zs(e));const c=UM(s,n,r)?kx(s):La(0);let d=(o.left+c.x)/u.x,p=(o.top+c.y)/u.y,m=o.width/u.x,g=o.height/u.y;if(s){const y=br(s),A=r&&ma(r)?br(r):r;let w=y,b=Nm(w);for(;b&&r&&A!==w;){const x=Zs(b),E=b.getBoundingClientRect(),S=pa(b),F=E.left+(b.clientLeft+parseFloat(S.paddingLeft))*x.x,R=E.top+(b.clientTop+parseFloat(S.paddingTop))*x.y;d*=x.x,p*=x.y,m*=x.x,g*=x.y,d+=F,p+=R,w=br(b),b=Nm(w)}}return zd({width:m,height:g,x:d,y:p})}function Ud(e,t){const n=Id(e).scrollLeft;return t?t.left+n:Qi(Ia(e)).left+n}function Mx(e,t){const n=e.getBoundingClientRect(),r=n.left+t.scrollLeft-Ud(e,n),o=n.top+t.scrollTop;return{x:r,y:o}}function VM(e){let{elements:t,rect:n,offsetParent:r,strategy:o}=e;const s=o==="fixed",u=Ia(r),c=t?Od(t.floating):!1;if(r===u||c&&s)return n;let d={scrollLeft:0,scrollTop:0},p=La(1);const m=La(0),g=lo(r);if((g||!g&&!s)&&((Ks(r)!=="body"||Ml(u))&&(d=Id(r)),g)){const A=Qi(r);p=Zs(r),m.x=A.x+r.clientLeft,m.y=A.y+r.clientTop}const y=u&&!g&&!s?Mx(u,d):La(0);return{width:n.width*p.x,height:n.height*p.y,x:n.x*p.x-d.scrollLeft*p.x+m.x+y.x,y:n.y*p.y-d.scrollTop*p.y+m.y+y.y}}function HM(e){return Array.from(e.getClientRects())}function QM(e){const t=Ia(e),n=Id(e),r=e.ownerDocument.body,o=yr(t.scrollWidth,t.clientWidth,r.scrollWidth,r.clientWidth),s=yr(t.scrollHeight,t.clientHeight,r.scrollHeight,r.clientHeight);let u=-n.scrollLeft+Ud(e);const c=-n.scrollTop;return pa(r).direction==="rtl"&&(u+=yr(t.clientWidth,r.clientWidth)-o),{width:o,height:s,x:u,y:c}}const Nx=25;function GM(e,t){const n=br(e),r=Ia(e),o=n.visualViewport;let s=r.clientWidth,u=r.clientHeight,c=0,d=0;if(o){s=o.width,u=o.height;const m=Mm();(!m||m&&t==="fixed")&&(c=o.offsetLeft,d=o.offsetTop)}const p=Ud(r);if(p<=0){const m=r.ownerDocument,g=m.body,y=getComputedStyle(g),A=m.compatMode==="CSS1Compat"&&parseFloat(y.marginLeft)+parseFloat(y.marginRight)||0,w=Math.abs(r.clientWidth-g.clientWidth-A);w<=Nx&&(s-=w)}else p<=Nx&&(s+=p);return{width:s,height:u,x:c,y:d}}function YM(e,t){const n=Qi(e,!0,t==="fixed"),r=n.top+e.clientTop,o=n.left+e.clientLeft,s=lo(e)?Zs(e):La(1),u=e.clientWidth*s.x,c=e.clientHeight*s.y,d=o*s.x,p=r*s.y;return{width:u,height:c,x:d,y:p}}function Tx(e,t,n){let r;if(t==="viewport")r=GM(e,n);else if(t==="document")r=QM(Ia(e));else if(ma(t))r=YM(t,n);else{const o=kx(e);r={x:t.x-o.x,y:t.y-o.y,width:t.width,height:t.height}}return zd(r)}function jx(e,t){const n=Ho(e);return n===t||!ma(n)||qs(n)?!1:pa(n).position==="fixed"||jx(n,t)}function KM(e,t){const n=t.get(e);if(n)return n;let r=Nl(e,[],!1).filter(c=>ma(c)&&Ks(c)!=="body"),o=null;const s=pa(e).position==="fixed";let u=s?Ho(e):e;for(;ma(u)&&!qs(u);){const c=pa(u),d=km(u);!d&&c.position==="fixed"&&(o=null),(s?!d&&!o:!d&&c.position==="static"&&!!o&&(o.position==="absolute"||o.position==="fixed")||Ml(u)&&!d&&jx(e,u))?r=r.filter(m=>m!==u):o=c,u=Ho(u)}return t.set(e,r),r}function qM(e){let{element:t,boundary:n,rootBoundary:r,strategy:o}=e;const u=[...n==="clippingAncestors"?Od(t)?[]:KM(t,this._c):[].concat(n),r],c=Tx(t,u[0],o);let d=c.top,p=c.right,m=c.bottom,g=c.left;for(let y=1;y{u(!1,1e-7)},1e3)}N===1&&!Lx(p,e.getBoundingClientRect())&&u(),R=!1}try{n=new IntersectionObserver(k,{...F,root:o.ownerDocument})}catch{n=new IntersectionObserver(k,F)}n.observe(e)}return u(!0),s}function tN(e,t,n,r){r===void 0&&(r={});const{ancestorScroll:o=!0,ancestorResize:s=!0,elementResize:u=typeof ResizeObserver=="function",layoutShift:c=typeof IntersectionObserver=="function",animationFrame:d=!1}=r,p=Tm(e),m=o||s?[...p?Nl(p):[],...t?Nl(t):[]]:[];m.forEach(E=>{o&&E.addEventListener("scroll",n,{passive:!0}),s&&E.addEventListener("resize",n)});const g=p&&c?eN(p,n):null;let y=-1,A=null;u&&(A=new ResizeObserver(E=>{let[S]=E;S&&S.target===p&&A&&t&&(A.unobserve(t),cancelAnimationFrame(y),y=requestAnimationFrame(()=>{var F;(F=A)==null||F.observe(t)})),n()}),p&&!d&&A.observe(p),t&&A.observe(t));let w,b=d?Qi(e):null;d&&x();function x(){const E=Qi(e);b&&!Lx(b,E)&&n(),b=E,w=requestAnimationFrame(x)}return n(),()=>{var E;m.forEach(S=>{o&&S.removeEventListener("scroll",n),s&&S.removeEventListener("resize",n)}),g?.(),(E=A)==null||E.disconnect(),A=null,d&&cancelAnimationFrame(w)}}const nN=MM,rN=NM,aN=RM,oN=jM,iN=BM,Ox=FM,sN=TM,uN=(e,t,n)=>{const r=new Map,o={platform:JM,...n},s={...o.platform,_c:r};return DM(e,t,{...o,platform:s})};var lN=typeof document<"u",cN=function(){},Vd=lN?C.useLayoutEffect:cN;function Hd(e,t){if(e===t)return!0;if(typeof e!=typeof t)return!1;if(typeof e=="function"&&e.toString()===t.toString())return!0;let n,r,o;if(e&&t&&typeof e=="object"){if(Array.isArray(e)){if(n=e.length,n!==t.length)return!1;for(r=n;r--!==0;)if(!Hd(e[r],t[r]))return!1;return!0}if(o=Object.keys(e),n=o.length,n!==Object.keys(t).length)return!1;for(r=n;r--!==0;)if(!{}.hasOwnProperty.call(t,o[r]))return!1;for(r=n;r--!==0;){const s=o[r];if(!(s==="_owner"&&e.$$typeof)&&!Hd(e[s],t[s]))return!1}return!0}return e!==e&&t!==t}function Ix(e){return typeof window>"u"?1:(e.ownerDocument.defaultView||window).devicePixelRatio||1}function Ux(e,t){const n=Ix(e);return Math.round(t*n)/n}function Pm(e){const t=C.useRef(e);return Vd(()=>{t.current=e}),t}function dN(e){e===void 0&&(e={});const{placement:t="bottom",strategy:n="absolute",middleware:r=[],platform:o,elements:{reference:s,floating:u}={},transform:c=!0,whileElementsMounted:d,open:p}=e,[m,g]=C.useState({x:0,y:0,strategy:n,placement:t,middlewareData:{},isPositioned:!1}),[y,A]=C.useState(r);Hd(y,r)||A(r);const[w,b]=C.useState(null),[x,E]=C.useState(null),S=C.useCallback(te=>{te!==B.current&&(B.current=te,b(te))},[]),F=C.useCallback(te=>{te!==N.current&&(N.current=te,E(te))},[]),R=s||w,k=u||x,B=C.useRef(null),N=C.useRef(null),P=C.useRef(m),U=d!=null,Q=Pm(d),$=Pm(o),q=Pm(p),V=C.useCallback(()=>{if(!B.current||!N.current)return;const te={placement:t,strategy:n,middleware:y};$.current&&(te.platform=$.current),uN(B.current,N.current,te).then(ue=>{const ie={...ue,isPositioned:q.current!==!1};W.current&&!Hd(P.current,ie)&&(P.current=ie,El.flushSync(()=>{g(ie)}))})},[y,t,n,$,q]);Vd(()=>{p===!1&&P.current.isPositioned&&(P.current.isPositioned=!1,g(te=>({...te,isPositioned:!1})))},[p]);const W=C.useRef(!1);Vd(()=>(W.current=!0,()=>{W.current=!1}),[]),Vd(()=>{if(R&&(B.current=R),k&&(N.current=k),R&&k){if(Q.current)return Q.current(R,k,V);V()}},[R,k,V,Q,U]);const ae=C.useMemo(()=>({reference:B,floating:N,setReference:S,setFloating:F}),[S,F]),j=C.useMemo(()=>({reference:R,floating:k}),[R,k]),G=C.useMemo(()=>{const te={position:n,left:0,top:0};if(!j.floating)return te;const ue=Ux(j.floating,m.x),ie=Ux(j.floating,m.y);return c?{...te,transform:"translate("+ue+"px, "+ie+"px)",...Ix(j.floating)>=1.5&&{willChange:"transform"}}:{position:n,left:ue,top:ie}},[n,c,j.floating,m.x,m.y]);return C.useMemo(()=>({...m,update:V,refs:ae,elements:j,floatingStyles:G}),[m,V,ae,j,G])}const fN=e=>{function t(n){return{}.hasOwnProperty.call(n,"current")}return{name:"arrow",options:e,fn(n){const{element:r,padding:o}=typeof e=="function"?e(n):e;return r&&t(r)?r.current!=null?Ox({element:r.current,padding:o}).fn(n):{}:r?Ox({element:r,padding:o}).fn(n):{}}}},hN=(e,t)=>{const n=nN(e);return{name:n.name,fn:n.fn,options:[e,t]}},mN=(e,t)=>{const n=rN(e);return{name:n.name,fn:n.fn,options:[e,t]}},pN=(e,t)=>({fn:sN(e).fn,options:[e,t]}),gN=(e,t)=>{const n=aN(e);return{name:n.name,fn:n.fn,options:[e,t]}},vN=(e,t)=>{const n=oN(e);return{name:n.name,fn:n.fn,options:[e,t]}},AN=(e,t)=>{const n=iN(e);return{name:n.name,fn:n.fn,options:[e,t]}},yN=(e,t)=>{const n=fN(e);return{name:n.name,fn:n.fn,options:[e,t]}};var bN="Arrow",Vx=C.forwardRef((e,t)=>{const{children:n,width:r=10,height:o=5,...s}=e;return f.jsx(Te.svg,{...s,ref:t,width:r,height:o,viewBox:"0 0 30 10",preserveAspectRatio:"none",children:e.asChild?n:f.jsx("polygon",{points:"0,0 30,0 15,10"})})});Vx.displayName=bN;var xN=Vx;function Qd(e){const[t,n]=C.useState(void 0);return Bn(()=>{if(e){n({width:e.offsetWidth,height:e.offsetHeight});const r=new ResizeObserver(o=>{if(!Array.isArray(o)||!o.length)return;const s=o[0];let u,c;if("borderBoxSize"in s){const d=s.borderBoxSize,p=Array.isArray(d)?d[0]:d;u=p.inlineSize,c=p.blockSize}else u=e.offsetWidth,c=e.offsetHeight;n({width:u,height:c})});return r.observe(e,{box:"border-box"}),()=>r.unobserve(e)}else n(void 0)},[e]),t}var zm="Popper",[Hx,Qo]=Vn(zm),[_N,Qx]=Hx(zm),Gx=e=>{const{__scopePopper:t,children:n}=e,[r,o]=C.useState(null);return f.jsx(_N,{scope:t,anchor:r,onAnchorChange:o,children:n})};Gx.displayName=zm;var Yx="PopperAnchor",Kx=C.forwardRef((e,t)=>{const{__scopePopper:n,virtualRef:r,...o}=e,s=Qx(Yx,n),u=C.useRef(null),c=nt(t,u),d=C.useRef(null);return C.useEffect(()=>{const p=d.current;d.current=r?.current||u.current,p!==d.current&&s.onAnchorChange(d.current)}),r?null:f.jsx(Te.div,{...o,ref:c})});Kx.displayName=Yx;var Lm="PopperContent",[CN,wN]=Hx(Lm),qx=C.forwardRef((e,t)=>{const{__scopePopper:n,side:r="bottom",sideOffset:o=0,align:s="center",alignOffset:u=0,arrowPadding:c=0,avoidCollisions:d=!0,collisionBoundary:p=[],collisionPadding:m=0,sticky:g="partial",hideWhenDetached:y=!1,updatePositionStrategy:A="optimized",onPlaced:w,...b}=e,x=Qx(Lm,n),[E,S]=C.useState(null),F=nt(t,de=>S(de)),[R,k]=C.useState(null),B=Qd(R),N=B?.width??0,P=B?.height??0,U=r+(s!=="center"?"-"+s:""),Q=typeof m=="number"?m:{top:0,right:0,bottom:0,left:0,...m},$=Array.isArray(p)?p:[p],q=$.length>0,V={padding:Q,boundary:$.filter(SN),altBoundary:q},{refs:W,floatingStyles:ae,placement:j,isPositioned:G,middlewareData:te}=dN({strategy:"fixed",placement:U,whileElementsMounted:(...de)=>tN(...de,{animationFrame:A==="always"}),elements:{reference:x.anchor},middleware:[hN({mainAxis:o+P,alignmentAxis:u}),d&&mN({mainAxis:!0,crossAxis:!1,limiter:g==="partial"?pN():void 0,...V}),d&&gN({...V}),vN({...V,apply:({elements:de,rects:ye,availableWidth:Ce,availableHeight:Ke})=>{const{width:Xe,height:st}=ye.reference,Wt=de.floating.style;Wt.setProperty("--radix-popper-available-width",`${Ce}px`),Wt.setProperty("--radix-popper-available-height",`${Ke}px`),Wt.setProperty("--radix-popper-anchor-width",`${Xe}px`),Wt.setProperty("--radix-popper-anchor-height",`${st}px`)}}),R&&yN({element:R,padding:c}),DN({arrowWidth:N,arrowHeight:P}),y&&AN({strategy:"referenceHidden",...V})]}),[ue,ie]=Xx(j),z=Pa(w);Bn(()=>{G&&z?.()},[G,z]);const O=te.arrow?.x,T=te.arrow?.y,J=te.arrow?.centerOffset!==0,[le,me]=C.useState();return Bn(()=>{E&&me(window.getComputedStyle(E).zIndex)},[E]),f.jsx("div",{ref:W.setFloating,"data-radix-popper-content-wrapper":"",style:{...ae,transform:G?ae.transform:"translate(0, -200%)",minWidth:"max-content",zIndex:le,"--radix-popper-transform-origin":[te.transformOrigin?.x,te.transformOrigin?.y].join(" "),...te.hide?.referenceHidden&&{visibility:"hidden",pointerEvents:"none"}},dir:e.dir,children:f.jsx(CN,{scope:n,placedSide:ue,onArrowChange:k,arrowX:O,arrowY:T,shouldHideArrow:J,children:f.jsx(Te.div,{"data-side":ue,"data-align":ie,...b,ref:F,style:{...b.style,animation:G?void 0:"none"}})})})});qx.displayName=Lm;var Zx="PopperArrow",EN={top:"bottom",right:"left",bottom:"top",left:"right"},Wx=C.forwardRef(function(t,n){const{__scopePopper:r,...o}=t,s=wN(Zx,r),u=EN[s.placedSide];return f.jsx("span",{ref:s.onArrowChange,style:{position:"absolute",left:s.arrowX,top:s.arrowY,[u]:0,transformOrigin:{top:"",right:"0 0",bottom:"center 0",left:"100% 0"}[s.placedSide],transform:{top:"translateY(100%)",right:"translateY(50%) rotate(90deg) translateX(-50%)",bottom:"rotate(180deg)",left:"translateY(50%) rotate(-90deg) translateX(50%)"}[s.placedSide],visibility:s.shouldHideArrow?"hidden":void 0},children:f.jsx(xN,{...o,ref:n,style:{...o.style,display:"block"}})})});Wx.displayName=Zx;function SN(e){return e!==null}var DN=e=>({name:"transformOrigin",options:e,fn(t){const{placement:n,rects:r,middlewareData:o}=t,u=o.arrow?.centerOffset!==0,c=u?0:e.arrowWidth,d=u?0:e.arrowHeight,[p,m]=Xx(n),g={start:"0%",center:"50%",end:"100%"}[m],y=(o.arrow?.x??0)+c/2,A=(o.arrow?.y??0)+d/2;let w="",b="";return p==="bottom"?(w=u?g:`${y}px`,b=`${-d}px`):p==="top"?(w=u?g:`${y}px`,b=`${r.floating.height+d}px`):p==="right"?(w=`${-d}px`,b=u?g:`${A}px`):p==="left"&&(w=`${r.floating.width+d}px`,b=u?g:`${A}px`),{data:{x:w,y:b}}}});function Xx(e){const[t,n="center"]=e.split("-");return[t,n]}var Gd=Gx,Tl=Kx,Yd=qx,Kd=Wx,qd="Popover",[$x]=Vn(qd,[Qo]),jl=Qo(),[FN,Go]=$x(qd),Jx=e=>{const{__scopePopover:t,children:n,open:r,defaultOpen:o,onOpenChange:s,modal:u=!1}=e,c=jl(t),d=C.useRef(null),[p,m]=C.useState(!1),[g,y]=ir({prop:r,defaultProp:o??!1,onChange:s,caller:qd});return f.jsx(Gd,{...c,children:f.jsx(FN,{scope:t,contentId:or(),triggerRef:d,open:g,onOpenChange:y,onOpenToggle:C.useCallback(()=>y(A=>!A),[y]),hasCustomAnchor:p,onCustomAnchorAdd:C.useCallback(()=>m(!0),[]),onCustomAnchorRemove:C.useCallback(()=>m(!1),[]),modal:u,children:n})})};Jx.displayName=qd;var e_="PopoverAnchor",RN=C.forwardRef((e,t)=>{const{__scopePopover:n,...r}=e,o=Go(e_,n),s=jl(n),{onCustomAnchorAdd:u,onCustomAnchorRemove:c}=o;return C.useEffect(()=>(u(),()=>c()),[u,c]),f.jsx(Tl,{...s,...r,ref:t})});RN.displayName=e_;var t_="PopoverTrigger",n_=C.forwardRef((e,t)=>{const{__scopePopover:n,...r}=e,o=Go(t_,n),s=jl(n),u=nt(t,o.triggerRef),c=f.jsx(Te.button,{type:"button","aria-haspopup":"dialog","aria-expanded":o.open,"aria-controls":o.contentId,"data-state":s_(o.open),...r,ref:u,onClick:_e(e.onClick,o.onOpenToggle)});return o.hasCustomAnchor?c:f.jsx(Tl,{asChild:!0,...s,children:c})});n_.displayName=t_;var Om="PopoverPortal",[BN,kN]=$x(Om,{forceMount:void 0}),r_=e=>{const{__scopePopover:t,forceMount:n,children:r,container:o}=e,s=Go(Om,t);return f.jsx(BN,{scope:t,forceMount:n,children:f.jsx(Hn,{present:n||s.open,children:f.jsx(Us,{asChild:!0,container:o,children:r})})})};r_.displayName=Om;var Ws="PopoverContent",a_=C.forwardRef((e,t)=>{const n=kN(Ws,e.__scopePopover),{forceMount:r=n.forceMount,...o}=e,s=Go(Ws,e.__scopePopover);return f.jsx(Hn,{present:r||s.open,children:s.modal?f.jsx(NN,{...o,ref:t}):f.jsx(TN,{...o,ref:t})})});a_.displayName=Ws;var MN=Ui("PopoverContent.RemoveScroll"),NN=C.forwardRef((e,t)=>{const n=Go(Ws,e.__scopePopover),r=C.useRef(null),o=nt(t,r),s=C.useRef(!1);return C.useEffect(()=>{const u=r.current;if(u)return kd(u)},[]),f.jsx(kl,{as:MN,allowPinchZoom:!0,children:f.jsx(o_,{...e,ref:o,trapFocus:n.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:_e(e.onCloseAutoFocus,u=>{u.preventDefault(),s.current||n.triggerRef.current?.focus()}),onPointerDownOutside:_e(e.onPointerDownOutside,u=>{const c=u.detail.originalEvent,d=c.button===0&&c.ctrlKey===!0,p=c.button===2||d;s.current=p},{checkForDefaultPrevented:!1}),onFocusOutside:_e(e.onFocusOutside,u=>u.preventDefault(),{checkForDefaultPrevented:!1})})})}),TN=C.forwardRef((e,t)=>{const n=Go(Ws,e.__scopePopover),r=C.useRef(!1),o=C.useRef(!1);return f.jsx(o_,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:s=>{e.onCloseAutoFocus?.(s),s.defaultPrevented||(r.current||n.triggerRef.current?.focus(),s.preventDefault()),r.current=!1,o.current=!1},onInteractOutside:s=>{e.onInteractOutside?.(s),s.defaultPrevented||(r.current=!0,s.detail.originalEvent.type==="pointerdown"&&(o.current=!0));const u=s.target;n.triggerRef.current?.contains(u)&&s.preventDefault(),s.detail.originalEvent.type==="focusin"&&o.current&&s.preventDefault()}})}),o_=C.forwardRef((e,t)=>{const{__scopePopover:n,trapFocus:r,onOpenAutoFocus:o,onCloseAutoFocus:s,disableOutsidePointerEvents:u,onEscapeKeyDown:c,onPointerDownOutside:d,onFocusOutside:p,onInteractOutside:m,...g}=e,y=Go(Ws,n),A=jl(n);return Cd(),f.jsx(Bl,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:o,onUnmountAutoFocus:s,children:f.jsx(Is,{asChild:!0,disableOutsidePointerEvents:u,onInteractOutside:m,onEscapeKeyDown:c,onPointerDownOutside:d,onFocusOutside:p,onDismiss:()=>y.onOpenChange(!1),children:f.jsx(Yd,{"data-state":s_(y.open),role:"dialog",id:y.contentId,...A,...g,ref:t,style:{...g.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})}),i_="PopoverClose",jN=C.forwardRef((e,t)=>{const{__scopePopover:n,...r}=e,o=Go(i_,n);return f.jsx(Te.button,{type:"button",...r,ref:t,onClick:_e(e.onClick,()=>o.onOpenChange(!1))})});jN.displayName=i_;var PN="PopoverArrow",zN=C.forwardRef((e,t)=>{const{__scopePopover:n,...r}=e,o=jl(n);return f.jsx(Kd,{...o,...r,ref:t})});zN.displayName=PN;function s_(e){return e?"open":"closed"}var LN=Jx,ON=n_,IN=r_,UN=a_,Pl=e=>e.type==="checkbox",Gi=e=>e instanceof Date,kn=e=>e==null;const u_=e=>typeof e=="object";var nn=e=>!kn(e)&&!Array.isArray(e)&&u_(e)&&!Gi(e),l_=e=>nn(e)&&e.target?Pl(e.target)?e.target.checked:e.target.value:e,c_=(e,t)=>t.split(".").some((n,r,o)=>!isNaN(Number(n))&&e.has(o.slice(0,r).join("."))),VN=e=>{const t=e.constructor&&e.constructor.prototype;return nn(t)&&t.hasOwnProperty("isPrototypeOf")},Zd=typeof window<"u"&&typeof window.HTMLElement<"u"&&typeof document<"u";function sn(e){if(e instanceof Date)return new Date(e);const t=typeof FileList<"u"&&e instanceof FileList;if(Zd&&(e instanceof Blob||t))return e;const n=Array.isArray(e);if(!n&&!(nn(e)&&VN(e)))return e;const r=n?[]:Object.create(Object.getPrototypeOf(e));for(const o in e)Object.prototype.hasOwnProperty.call(e,o)&&(r[o]=sn(e[o]));return r}const Yo={BLUR:"blur",FOCUS_OUT:"focusout",CHANGE:"change",SUBMIT:"submit",TRIGGER:"trigger",VALID:"valid"},ga={onBlur:"onBlur",onChange:"onChange",onSubmit:"onSubmit",onTouched:"onTouched",all:"all"},va={max:"max",min:"min",maxLength:"maxLength",minLength:"minLength",pattern:"pattern",required:"required",validate:"validate"},Im="form",d_="root",f_=["__proto__","constructor","prototype"];var zl=e=>/^\w*$/.test(e),Yt=e=>e===void 0,Wd=e=>e.split(/[.[\]'"]/g).filter(Boolean),xe=(e,t,n)=>{if(!t||!nn(e))return n;const r=zl(t)?[t]:Wd(t);if(r.some(s=>f_.includes(s)))return n;const o=r.reduce((s,u)=>kn(s)?void 0:s[u],e);return Yt(o)||o===e?Yt(e[t])?n:e[t]:o},xr=e=>typeof e=="boolean",Qn=e=>typeof e=="function",wt=(e,t,n)=>{let r=-1;const o=zl(t)?[t]:Wd(t),s=o.length,u=s-1;for(;++rY.useContext(Um);var h_=(e,t,n,r=!0)=>{const o={};for(const s in e)Object.defineProperty(o,s,{get:()=>{const u=s;return t._proxyFormState[u]!==ga.all&&(t._proxyFormState[u]=!r||ga.all),n&&(n[u]=!0),e[u]}});return o};const Hm=Zd?Y.useLayoutEffect:Y.useEffect;function m_(e){const t=Vm(),{control:n=t,disabled:r,name:o,exact:s}=e||{},[u,c]=Y.useState(()=>({...n._formState,defaultValues:n._defaultValues})),d=Y.useRef({isDirty:!1,isLoading:!1,dirtyFields:!1,touchedFields:!1,validatingFields:!1,isValidating:!1,isValid:!1,errors:!1});return Hm(()=>n._subscribe({name:o,formState:d.current,exact:s,callback:p=>{!r&&c({...n._formState,...p,defaultValues:n._defaultValues})}}),[o,r,s]),Y.useEffect(()=>{d.current.isValid&&n._setValid(!0)},[n]),Y.useMemo(()=>h_(u,n,d.current,!1),[u,n])}var Gn=e=>typeof e=="string",Qm=(e,t,n,r,o)=>Gn(e)?(r&&t.watch.add(e),xe(n,e,o)):Array.isArray(e)?e.map(s=>(r&&t.watch.add(s),xe(n,s))):(r&&(t.watchAll=!0),n),Gm=e=>kn(e)||!u_(e);function _r(e,t,n=new WeakSet){if(e===t)return!0;if(Gm(e)||Gm(t))return Object.is(e,t);if(Gi(e)&&Gi(t))return Object.is(e.getTime(),t.getTime());const r=Object.keys(e),o=Object.keys(t);if(r.length!==o.length)return!1;if(n.has(e)||n.has(t))return!0;n.add(e),n.add(t);for(const s of r){const u=e[s];if(!(s in t))return!1;if(s!=="ref"){const c=t[s];if(Gi(u)&&Gi(c)||(nn(u)||Array.isArray(u))&&(nn(c)||Array.isArray(c))?!_r(u,c,n):!Object.is(u,c))return!1}}return!0}function HN(e){const t=Vm(),{control:n=t,name:r,defaultValue:o,disabled:s,exact:u,compute:c}=e||{},d=Y.useRef(o),p=Y.useRef(c),m=Y.useRef(void 0),g=Y.useRef(n),y=Y.useRef(r);p.current=c;const[A,w]=Y.useState(()=>{const R=n._getWatch(r,d.current);return p.current?p.current(R):R}),b=Y.useCallback(R=>{const k=Qm(r,n._names,R||n._formValues,!1,d.current);return p.current?p.current(k):k},[n._formValues,n._names,r]),x=Y.useCallback(R=>{if(!s){const k=Qm(r,n._names,R||n._formValues,!1,d.current);if(p.current){const B=p.current(k);_r(B,m.current)||(w(B),m.current=B)}else w(k)}},[n._formValues,n._names,s,r]);Hm(()=>((g.current!==n||!_r(y.current,r))&&(g.current=n,y.current=r,x()),n._subscribe({name:r,formState:{values:!0},exact:u,callback:R=>{x(R.values)}})),[n,u,r,x]),Y.useEffect(()=>n._removeUnmounted());const E=g.current!==n,S=y.current,F=Y.useMemo(()=>{if(s)return null;const R=!E&&!_r(S,r);return E||R?b():null},[s,E,r,S,b]);return F!==null?F:A}function QN(e){const t=Vm(),{name:n,disabled:r,control:o=t,shouldUnregister:s,defaultValue:u,exact:c=!0}=e,d=c_(o._names.array,n),p=Y.useMemo(()=>xe(o._formValues,n,xe(o._defaultValues,n,u)),[o,n,u]),m=HN({control:o,name:n,defaultValue:p,exact:c}),g=m_({control:o,name:n,exact:c}),y=Y.useRef(e),A=Y.useRef(o.register(n,{...e.rules,value:m,...xr(e.disabled)?{disabled:e.disabled}:{}}));y.current=e;const w=Y.useMemo(()=>Object.defineProperties({},{invalid:{enumerable:!0,get:()=>!!xe(g.errors,n)},isDirty:{enumerable:!0,get:()=>!!xe(g.dirtyFields,n)},isTouched:{enumerable:!0,get:()=>!!xe(g.touchedFields,n)},isValidating:{enumerable:!0,get:()=>!!xe(g.validatingFields,n)},error:{enumerable:!0,get:()=>xe(g.errors,n)}}),[g,n]),b=Y.useCallback(F=>A.current.onChange({target:{value:l_(F),name:n},type:Yo.CHANGE}),[n]),x=Y.useCallback(()=>A.current.onBlur({target:{value:xe(o._formValues,n),name:n},type:Yo.BLUR}),[n,o._formValues]),E=Y.useCallback(F=>{const R=xe(o._fields,n);R&&R._f&&F&&(R._f.ref={focus:()=>Qn(F.focus)&&F.focus(),select:()=>Qn(F.select)&&F.select(),setCustomValidity:k=>Qn(F.setCustomValidity)&&F.setCustomValidity(k),reportValidity:()=>Qn(F.reportValidity)&&F.reportValidity()})},[o._fields,n]),S=Y.useMemo(()=>({name:n,value:m,...xr(r)||g.disabled?{disabled:g.disabled||r}:{},onChange:b,onBlur:x,ref:E}),[n,r,g.disabled,b,x,E,m]);return Y.useEffect(()=>{const F=o._options.shouldUnregister||s;o.register(n,{...y.current.rules,...xr(y.current.disabled)?{disabled:y.current.disabled}:{}});const R=(k,B)=>{const N=xe(o._fields,k);N&&N._f&&(N._f.mount=B)};if(R(n,!0),F){const k=sn(xe(o._defaultValues,n,xe(o._options.defaultValues,n,y.current.defaultValue)));wt(o._defaultValues,n,k),Yt(xe(o._formValues,n))&&wt(o._formValues,n,k)}return!d&&o.register(n),()=>{(d?F&&!o._state.action:F)?o.unregister(n):R(n,!1)}},[n,o,d,s]),Y.useEffect(()=>{o._setDisabledField({disabled:r,name:n})},[r,n,o]),Y.useMemo(()=>({field:S,formState:g,fieldState:w}),[S,g,w])}const GN=e=>e.render(QN(e)),Ym=Y.createContext(null);Ym.displayName="HookFormContext";const p_=()=>Y.useContext(Ym),YN=({children:e,watch:t,getValues:n,getFieldState:r,setError:o,clearErrors:s,setValue:u,setValues:c,trigger:d,formState:p,resetField:m,reset:g,handleSubmit:y,unregister:A,control:w,register:b,setFocus:x,subscribe:E})=>{const S=Y.useMemo(()=>({watch:t,getValues:n,getFieldState:r,setError:o,clearErrors:s,setValue:u,setValues:c,trigger:d,formState:p,resetField:m,reset:g,handleSubmit:y,unregister:A,control:w,register:b,setFocus:x,subscribe:E}),[s,w,p,r,n,y,b,g,m,o,x,u,c,E,d,A,t]);return Y.createElement(Ym.Provider,{value:S},Y.createElement(Um.Provider,{value:S.control},e))};var Km=(e,t,n,r,o)=>t?{...n[e],types:{...n[e]&&n[e].types?n[e].types:{},[r]:o||!0}}:{},g_=e=>Array.isArray(e)?e.filter(Boolean):[],Xd=e=>Array.isArray(e)?e:[e],v_=()=>{let e=[];return{get observers(){return e},next:o=>{for(const s of e)s.next&&s.next(o)},subscribe:o=>(e.push(o),{unsubscribe:()=>{e=e.filter(s=>s!==o)}}),unsubscribe:()=>{e=[]}}};function A_(e,t){const n={};for(const r in e)if(e.hasOwnProperty(r)){const o=e[r],s=t[r];if(o&&nn(o)&&s){const u=A_(o,s);nn(u)&&(n[r]=u)}else e[r]&&(n[r]=s)}return n}var Mn=e=>nn(e)&&!Object.keys(e).length,qm=e=>e.type==="file",$d=e=>{if(!Zd)return!1;const t=e?e.ownerDocument:0;return e instanceof(t&&t.defaultView?t.defaultView.HTMLElement:HTMLElement)},y_=e=>e.type==="select-multiple",Zm=e=>e.type==="radio",KN=e=>Zm(e)||Pl(e),Wm=e=>$d(e)&&e.isConnected;function qN(e,t){const n=t.slice(0,-1).length;let r=0;for(;r{for(const t in e)if(Qn(e[t]))return!0;return!1};function b_(e){return Array.isArray(e)||nn(e)&&!WN(e)}function Xm(e,t={}){for(const n in e){const r=e[n];b_(r)?(t[n]=Array.isArray(r)?[]:{},Xm(r,t[n])):Yt(r)||(t[n]=!0)}return t}function $m(e){if(e!==!1){if(e===!0)return!0;if(Array.isArray(e)){const t=e.map(n=>$m(n));return t.some(n=>n!==void 0)?t:void 0}if(nn(e)){const t={};for(const n in e){const r=$m(e[n]);Yt(r)||(t[n]=r)}return Object.keys(t).length?t:void 0}}}function Yi(e,t,n){n||(n=Xm(t));for(const r in e){const o=e[r];if(b_(o))Yt(t)||Gm(n[r])?n[r]=Xm(o,Array.isArray(o)?[]:{}):Yi(o,kn(t)?{}:t[r],n[r]);else{const s=t[r];n[r]=!_r(o,s)}}return $m(n)||{}}const x_={value:!1,isValid:!1},__={value:!0,isValid:!0};var C_=e=>{if(Array.isArray(e)){if(e.length>1){const t=e.filter(n=>n&&n.checked&&!n.disabled).map(n=>n.value);return{value:t,isValid:!!t.length}}return e[0].checked&&!e[0].disabled?e[0].attributes&&!Yt(e[0].attributes.value)?Yt(e[0].value)||e[0].value===""?__:{value:e[0].value,isValid:!0}:__:x_}return x_},w_=(e,{valueAsNumber:t,valueAsDate:n,setValueAs:r})=>Yt(e)?e:t?e===""?NaN:e&&+e:n&&Gn(e)?new Date(e):r?r(e):e;const E_={isValid:!1,value:null};var S_=e=>Array.isArray(e)?e.reduce((t,n)=>n&&n.checked&&!n.disabled?{isValid:!0,value:n.value}:t,E_):E_;function D_(e){const t=e.ref;return qm(t)?t.files:Zm(t)?S_(e.refs).value:y_(t)?[...t.selectedOptions].map(({value:n})=>n):Pl(t)?C_(e.refs).value:w_(Yt(t.value)?e.ref.value:t.value,e)}var XN=(e,t,n,r)=>{const o={};for(const s of e){const u=xe(t,s);u&&wt(o,s,u._f)}return{criteriaMode:n,names:[...e],fields:o,shouldUseNativeValidation:r}},Jd=e=>e instanceof RegExp,Ll=e=>Yt(e)?e:Jd(e)?e.source:nn(e)?Jd(e.value)?e.value.source:e.value:e,F_=e=>({isOnSubmit:!e||e===ga.onSubmit,isOnBlur:e===ga.onBlur,isOnChange:e===ga.onChange,isOnAll:e===ga.all,isOnTouch:e===ga.onTouched});const R_="AsyncFunction";var $N=e=>!!e&&!!e.validate&&!!(Qn(e.validate)&&e.validate.constructor.name===R_||nn(e.validate)&&Object.values(e.validate).find(t=>t.constructor.name===R_)),JN=e=>e.mount&&(e.required||e.min||e.max||e.maxLength||e.minLength||e.pattern||e.validate),B_=(e,t,n)=>!n&&(t.watchAll||t.watch.has(e)||[...t.watch].some(r=>e.startsWith(`${r}.`)));const Ol=(e,t,n,r)=>{for(const o of n||Object.keys(e)){const s=xe(e,o);if(s){const{_f:u,...c}=s;if(u){if(u.refs&&u.refs[0]&&t(u.refs[0],o)&&!r)return!0;if(u.ref&&t(u.ref,u.name)&&!r)return!0;if(Ol(c,t))break}else if(nn(c)&&Ol(c,t))break}}};function k_(e,t,n){const r=xe(e,n);if(r||zl(n))return{error:r,name:n};const o=n.split(".");for(;o.length;){const s=o.join("."),u=xe(t,s),c=xe(e,s);if(u&&!Array.isArray(u)&&n!==s)return{name:n};if(c&&c.type)return{name:s,error:c};if(c&&c.root&&c.root.type)return{name:`${s}.root`,error:c.root};o.pop()}return{name:n}}var eT=(e,t,n,r)=>{n(e);const{name:o,...s}=e;return Mn(s)||r&&Object.keys(s).length>=Object.keys(t).length||Object.keys(s).find(u=>t[u]===(!r||ga.all))},tT=(e,t,n)=>!e||!t||e===t||Xd(e).some(r=>r&&(n?r===t:r.startsWith(t)||t.startsWith(r))),nT=(e,t,n,r,o)=>o.isOnAll?!1:!n&&o.isOnTouch?!(t||e):(n?r.isOnBlur:o.isOnBlur)?!e:(n?r.isOnChange:o.isOnChange)?e:!0,rT=(e,t)=>!g_(xe(e,t)).length&&gn(e,t),M_=(e,t,n)=>{const r=xe(e,n),o=Array.isArray(r)?r:[];return wt(o,d_,t[n]),wt(e,n,o),e};function N_(e,t,n="validate"){if(Gn(e)||Array.isArray(e)&&e.every(Gn)||xr(e)&&!e)return{type:n,message:Gn(e)?e:"",ref:t}}var Xs=e=>nn(e)&&!Jd(e)?e:{value:e,message:""},T_=async(e,t,n,r,o,s)=>{const{ref:u,refs:c,required:d,maxLength:p,minLength:m,min:g,max:y,pattern:A,validate:w,name:b,valueAsNumber:x,mount:E}=e._f,S=xe(n,b);if(!E||t.has(b))return{};const F=c?c[0]:u,R=q=>{o&&F.reportValidity&&(F.setCustomValidity(xr(q)?"":q||""),F.reportValidity())},k={},B=Zm(u),N=Pl(u),P=B||N,U=(x||qm(u))&&Yt(u.value)&&Yt(S)||$d(u)&&u.value===""||S===""||Array.isArray(S)&&!S.length,Q=Km.bind(null,b,r,k),$=(q,V,W,ae=va.maxLength,j=va.minLength)=>{const G=q?V:W;k[b]={type:q?ae:j,message:G,ref:u,...Q(q?ae:j,G)}};if(s?!Array.isArray(S)||!S.length:d&&(!P&&(U||kn(S))||xr(S)&&!S||N&&!C_(c).isValid||B&&!S_(c).isValid)){const{value:q,message:V}=Gn(d)?{value:!!d,message:d}:Xs(d);if(q&&(k[b]={type:va.required,message:V,ref:F,...Q(va.required,V)},!r))return R(V),k}if(!U&&(!kn(g)||!kn(y))){let q,V;const W=Xs(y),ae=Xs(g);if(!kn(S)&&!isNaN(S)){const j=u.valueAsNumber||S&&+S;kn(W.value)||(q=j>W.value),kn(ae.value)||(V=jnew Date(new Date().toDateString()+" "+ie),te=u.type=="time",ue=u.type=="week";Gn(W.value)&&S&&(q=te?G(S)>G(W.value):ue?S>W.value:j>new Date(W.value)),Gn(ae.value)&&S&&(V=te?G(S)+q.value,ae=!kn(V.value)&&S.length<+V.value;if((W||ae)&&($(W,q.message,V.message),!r))return R(k[b].message),k}if(A&&!U&&Gn(S)){const{value:q,message:V}=Xs(A);if(Jd(q)&&!S.match(q)&&(k[b]={type:va.pattern,message:V,ref:u,...Q(va.pattern,V)},!r))return R(V),k}if(w){if(Qn(w)){const q=await w(S,n),V=N_(q,F);if(V&&(k[b]={...V,...Q(va.validate,V.message)},!r))return R(V.message),k}else if(nn(w)){let q={};for(const V in w){if(!Mn(q)&&!r)break;const W=N_(await w[V](S,n),F,V);W&&(q={...W,...Q(V,W.message)},R(W.message),r&&(k[b]=q))}if(!Mn(q)&&(k[b]={ref:F,...q},!r))return k}}return R(!0),k};const aT={mode:ga.onSubmit,reValidateMode:ga.onChange,shouldFocusError:!0},j_={submitCount:0,isDirty:!1,isReady:!1,isValidating:!1,isSubmitted:!1,isSubmitting:!1,isSubmitSuccessful:!1,isValid:!1,touchedFields:{},dirtyFields:{},validatingFields:{}};function oT(e={}){let t={...aT,...e},n={...sn(j_),isLoading:Qn(t.defaultValues),errors:t.errors||{},disabled:t.disabled||!1},r={},o=nn(t.defaultValues)||nn(t.values)?sn(t.defaultValues||t.values)||{}:{},s=t.shouldUnregister?{}:sn(o),u={action:!1,mount:!1,watch:!1,keepIsValid:!1},c={mount:new Set,disabled:new Set,unMount:new Set,array:new Set,watch:new Set,registerName:new Set},d,p=0;const m={isDirty:!1,dirtyFields:!1,validatingFields:!1,touchedFields:!1,isValidating:!1,isValid:!1,errors:!1},g={...m};let y={...g};const A={array:v_(),state:v_()},w=t.criteriaMode===ga.all,b=L=>K=>{clearTimeout(p),p=setTimeout(L,K)},x=async L=>{if(!u.keepIsValid&&!t.disabled&&(g.isValid||y.isValid||L)){let K;t.resolver?(K=Mn((await Q()).errors),E()):K=await V({fields:r,onlyCheckValid:!0,eventType:Yo.VALID}),K!==n.isValid&&A.state.next({isValid:K})}},E=(L,K)=>{!t.disabled&&(g.isValidating||g.validatingFields||y.isValidating||y.validatingFields)&&((L||Array.from(c.mount)).forEach(ee=>{ee&&(K?wt(n.validatingFields,ee,K):gn(n.validatingFields,ee))}),A.state.next({validatingFields:n.validatingFields,isValidating:!Mn(n.validatingFields)}))},S=()=>{n.dirtyFields=Yi(o,s)},F=(L,K=[],ee,pe,Ae=!0,be=!0)=>{if(pe&&ee&&!t.disabled){if(u.action=!0,be&&Array.isArray(xe(r,L))){const ve=ee(xe(r,L),pe.argA,pe.argB);Ae&&wt(r,L,ve)}if(be&&Array.isArray(xe(n.errors,L))){const ve=ee(xe(n.errors,L),pe.argA,pe.argB);Ae&&wt(n.errors,L,ve),rT(n.errors,L)}if((g.touchedFields||y.touchedFields)&&be&&Array.isArray(xe(n.touchedFields,L))){const ve=ee(xe(n.touchedFields,L),pe.argA,pe.argB);Ae&&wt(n.touchedFields,L,ve)}(g.dirtyFields||y.dirtyFields)&&S(),A.state.next({name:L,isDirty:ae(L,K),dirtyFields:n.dirtyFields,errors:n.errors,isValid:n.isValid})}else wt(s,L,K)},R=(L,K)=>{wt(n.errors,L,K),A.state.next({errors:n.errors})},k=L=>{n.errors=L,A.state.next({errors:n.errors,isValid:!1})},B=L=>{const K=zl(L)?[L]:Wd(L);let ee=s,pe=o;for(let Ae=0;Ae{const Ae=xe(r,L);if(Ae){if(B(L))return;const be=Yt(xe(s,L)),ve=xe(s,L,Yt(ee)?xe(o,L):ee);Yt(ve)||pe&&pe.defaultChecked||K?wt(s,L,K?ve:D_(Ae._f)):te(L,ve),u.mount&&!u.action&&(x(),be&&n.isDirty&&(g.isDirty||y.isDirty)&&(ae()||(n.isDirty=!1,A.state.next({...n}))))}},P=(L,K,ee,pe,Ae)=>{let be=!1,ve=!1;const Ee={name:L};if(!t.disabled){if(!ee||pe){(g.isDirty||y.isDirty)&&(ve=n.isDirty,n.isDirty=Ee.isDirty=ae(),be=ve!==Ee.isDirty);const Oe=_r(xe(o,L),K);ve=!!xe(n.dirtyFields,L),Oe!==n.isDirty?n.dirtyFields=Yi(o,s):Oe?gn(n.dirtyFields,L):wt(n.dirtyFields,L,!0),Ee.dirtyFields=n.dirtyFields,be=be||(g.dirtyFields||y.dirtyFields)&&ve!==!Oe}if(ee){const Oe=xe(n.touchedFields,L);Oe||(wt(n.touchedFields,L,ee),Ee.touchedFields=n.touchedFields,be=be||(g.touchedFields||y.touchedFields)&&Oe!==ee)}be&&Ae&&A.state.next(Ee)}return be?Ee:{}},U=(L,K,ee,pe)=>{const Ae=xe(n.errors,L),be=(g.isValid||y.isValid)&&xr(K)&&n.isValid!==K;if(t.delayError&&ee?(d=b(()=>R(L,ee)),d(t.delayError)):(clearTimeout(p),d=null,ee?wt(n.errors,L,ee):gn(n.errors,L)),(ee?!_r(Ae,ee):Ae)||!Mn(pe)||be){const ve={...pe,...be&&xr(K)?{isValid:K}:{},errors:n.errors,name:L};n={...n,...ve},A.state.next(ve)}},Q=async L=>(E(L,!0),await t.resolver(s,t.context,XN(L||c.mount,r,t.criteriaMode,t.shouldUseNativeValidation))),$=async L=>{const{errors:K}=await Q(L);if(E(L),L)for(const ee of L){const pe=xe(K,ee);pe?c.array.has(ee)&&nn(pe)&&!Object.keys(pe).some(Ae=>!Number.isNaN(Number(Ae)))?M_(n.errors,{[ee]:pe},ee):wt(n.errors,ee,pe):gn(n.errors,ee)}else n.errors=K;return K},q=async({name:L,eventType:K})=>{if(e.validate){const ee=await e.validate({formValues:s,formState:n,name:L,eventType:K});if(nn(ee))for(const pe in ee){const Ae=ee[pe];Ae&&Ce(`${Im}.${pe}`,{message:Gn(Ae.message)?Ae.message:"",type:Ae.type||va.validate})}else Gn(ee)||!ee?Ce(Im,{message:ee||"",type:va.validate}):ye(Im);return ee}return!0},V=async({fields:L,onlyCheckValid:K,name:ee,eventType:pe,context:Ae={valid:!0,runRootValidation:!1}})=>{if(e.validate&&(Ae.runRootValidation=!0,!await q({name:ee,eventType:pe})&&(Ae.valid=!1,K)))return Ae.valid;for(const be in L){const ve=L[be];if(ve){const{_f:Ee,...Oe}=ve;if(Ee){const ct=c.array.has(Ee.name),qn=ve._f&&$N(ve._f),Tn=g.validatingFields||g.isValidating||y.validatingFields||y.isValidating;qn&&Tn&&E([Ee.name],!0);const En=await T_(ve,c.disabled,s,w,t.shouldUseNativeValidation&&!K,ct);if(qn&&Tn&&E([Ee.name]),En[Ee.name]&&(Ae.valid=!1,K)||(!K&&(xe(En,Ee.name)?ct?M_(n.errors,En,Ee.name):wt(n.errors,Ee.name,En[Ee.name]):gn(n.errors,Ee.name)),e.shouldUseNativeValidation&&En[Ee.name]))break}!Mn(Oe)&&await V({context:Ae,onlyCheckValid:K,fields:Oe,name:be,eventType:pe})}}return Ae.valid},W=()=>{for(const L of c.unMount){const K=xe(r,L);K&&(K._f.refs?K._f.refs.every(ee=>!Wm(ee)):!Wm(K._f.ref))&&Wt(L)}c.unMount=new Set},ae=(L,K)=>!t.disabled&&(L&&K&&wt(s,L,K),!_r(me(),o)),j=(L,K,ee)=>Qm(L,c,{...u.mount?s:Yt(K)?o:Gn(L)?{[L]:K}:K},ee,K),G=L=>g_(xe(u.mount?s:o,L,t.shouldUnregister?xe(o,L,[]):[])),te=(L,K,ee={},pe=!1)=>{const Ae=xe(r,L);let be=K;if(Ae){const ve=Ae._f;ve&&(!ve.disabled&&wt(s,L,w_(K,ve)),be=$d(ve.ref)&&kn(K)?"":K,y_(ve.ref)?[...ve.ref.options].forEach(Ee=>Ee.selected=be.includes(Ee.value)):ve.refs?Pl(ve.ref)?ve.refs.forEach(Ee=>{(!Ee.defaultChecked||!Ee.disabled)&&(Array.isArray(be)?Ee.checked=!!be.find(Oe=>Oe===Ee.value):Ee.checked=be===Ee.value||!!be)}):ve.refs.forEach(Ee=>Ee.checked=Ee.value===be):qm(ve.ref)?ve.ref.value="":(ve.ref.value=be,ve.ref.type||A.state.next({name:L,values:pe?s:sn(s)})))}(ee.shouldDirty||ee.shouldTouch)&&P(L,be,ee.shouldTouch,ee.shouldDirty,!0),ee.shouldValidate&&le(L)},ue=(L,K,ee,pe=!1)=>{for(const Ae in K){if(!K.hasOwnProperty(Ae))return;const be=K[Ae],ve=L+"."+Ae,Ee=xe(r,ve);(c.array.has(L)||nn(be)||Ee&&!Ee._f)&&!Gi(be)?ue(ve,be,ee,pe):te(ve,be,ee,pe)}},ie=(L,K,ee,pe)=>{const Ae=xe(r,L),be=c.array.has(L),ve=pe?K:sn(K),Ee=xe(s,L),Oe=_r(Ee,ve);if(Oe||wt(s,L,ve),be)A.array.next({name:L,values:pe?s:sn(s)}),(g.isDirty||g.dirtyFields||y.isDirty||y.dirtyFields)&&ee.shouldDirty&&(S(),A.state.next({name:L,dirtyFields:n.dirtyFields,isDirty:ae(L,ve)}));else{const ct=Array.isArray(ve)&&!ve.length||Mn(ve);!Ae||Ae._f||kn(ve)||ct?te(L,ve,ee,pe):ue(L,ve,ee,pe)}if(!Oe){const ct=B_(L,c),qn=pe?s:sn(s);A.state.next({...ct&&n,name:u.mount||ct?L:void 0,values:qn})}},z=(L,K,ee={})=>ie(L,K,ee,!1),O=(L,K={})=>{const ee=Qn(L)?L(s):L;if(!_r(s,ee)){s={...s,...ee};for(const pe of c.mount)ie(pe,xe(ee,pe),K,!0);A.state.next({...n,name:void 0,type:void 0,values:s}),K.shouldValidate&&x()}},T=async L=>{u.mount=!0;const K=L.target;let ee=K.name,pe=!0;const Ae=xe(r,ee),be=Oe=>{pe=Number.isNaN(Oe)||Gi(Oe)&&isNaN(Oe.getTime())||_r(Oe,xe(s,ee,Oe))},ve=F_(t.mode),Ee=F_(t.reValidateMode);if(Ae){let Oe,ct;const qn=K.type?D_(Ae._f):l_(L),Tn=L.type===Yo.BLUR||L.type===Yo.FOCUS_OUT,En=!JN(Ae._f)&&!e.validate&&!t.resolver&&!xe(n.errors,ee)&&!Ae._f.deps||nT(Tn,xe(n.touchedFields,ee),n.isSubmitted,Ee,ve),Za=B_(ee,c,Tn);wt(s,ee,qn),Tn?(!K||!K.readOnly)&&(Ae._f.onBlur&&Ae._f.onBlur(L),d&&d(0)):Ae._f.onChange&&Ae._f.onChange(L);const Wa=P(ee,qn,Tn),ho=!Mn(Wa)||Za;if(!Tn&&A.state.next({name:ee,type:L.type,values:sn(s)}),En)return(g.isValid||y.isValid)&&(t.mode==="onBlur"?Tn&&x():Tn||x()),ho&&A.state.next({name:ee,...Za?{}:Wa});if(!t.resolver&&e.validate&&await q({name:ee,eventType:L.type}),!Tn&&Za&&A.state.next({...n}),t.resolver){const{errors:Mr}=await Q([ee]);if(E([ee]),be(qn),pe){const Ie=k_(n.errors,r,ee),Pt=k_(Mr,r,Ie.name||ee);Oe=Pt.error,ee=Pt.name,ct=Mn(Mr)}}else E([ee],!0),Oe=(await T_(Ae,c.disabled,s,w,t.shouldUseNativeValidation))[ee],E([ee]),be(qn),pe&&(Oe?ct=!1:(g.isValid||y.isValid)&&(ct=await V({fields:r,onlyCheckValid:!0,name:ee,eventType:L.type})));pe&&(Ae._f.deps&&(!Array.isArray(Ae._f.deps)||Ae._f.deps.length>0)&&le(Ae._f.deps),U(ee,ct,Oe,Wa))}},J=(L,K)=>{if(xe(n.errors,K)&&L.focus)return L.focus(),1},le=async(L,K={})=>{let ee,pe;const Ae=Xd(L);if(t.resolver){const be=await $(Yt(L)?L:Ae);ee=Mn(be),pe=L?!Ae.some(ve=>xe(be,ve)):ee}else L?(pe=(await Promise.all(Ae.map(async be=>{const ve=xe(r,be);return await V({fields:ve&&ve._f?{[be]:ve}:ve,eventType:Yo.TRIGGER})}))).every(Boolean),!(!pe&&!n.isValid)&&x()):pe=ee=await V({fields:r,name:L,eventType:Yo.TRIGGER});return A.state.next({...!Gn(L)||(g.isValid||y.isValid)&&ee!==n.isValid?{}:{name:L},...t.resolver||!L?{isValid:ee}:{},errors:n.errors}),K.shouldFocus&&!pe&&Ol(r,J,L?Ae:c.mount),pe},me=(L,K)=>{let ee={...u.mount?s:o};return K&&(ee=A_(K.dirtyFields?n.dirtyFields:n.touchedFields,ee)),Yt(L)?ee:Gn(L)?xe(ee,L):L.map(pe=>xe(ee,pe))},de=(L,K)=>({invalid:!!xe((K||n).errors,L),isDirty:!!xe((K||n).dirtyFields,L),error:xe((K||n).errors,L),isValidating:!!xe(n.validatingFields,L),isTouched:!!xe((K||n).touchedFields,L)}),ye=L=>{const K=L?Xd(L):void 0;K?.forEach(ee=>gn(n.errors,ee)),K?K.forEach(ee=>{A.state.next({name:ee,errors:n.errors})}):A.state.next({errors:{}})},Ce=(L,K,ee)=>{const pe=(xe(r,L,{_f:{}})._f||{}).ref,Ae=xe(n.errors,L)||{},{ref:be,message:ve,type:Ee,...Oe}=Ae;wt(n.errors,L,{...Oe,...K,ref:pe}),A.state.next({name:L,errors:n.errors,isValid:!1}),ee&&ee.shouldFocus&&pe&&pe.focus&&pe.focus()},Ke=(L,K)=>Qn(L)?A.state.subscribe({next:ee=>"values"in ee&&L(ee.values||j(void 0,K),ee)}):j(L,K,!0),Xe=L=>A.state.subscribe({next:K=>{if(tT(L.name,K.name,L.exact)&&eT(K,L.formState||g,Ka,L.reRenderRoot)){const ee={...s};L.callback({values:ee,...n,...K,defaultValues:o})}}}).unsubscribe,st=L=>(u.mount=!0,y={...y,...L.formState},Xe({...L,formState:{...m,...L.formState}})),Wt=(L,K={})=>{for(const ee of L?Xd(L):c.mount)c.mount.delete(ee),c.array.delete(ee),K.keepValue||(gn(r,ee),gn(s,ee)),!K.keepError&&gn(n.errors,ee),!K.keepDirty&&gn(n.dirtyFields,ee),!K.keepTouched&&gn(n.touchedFields,ee),!K.keepIsValidating&&gn(n.validatingFields,ee),!t.shouldUnregister&&!K.keepDefaultValue&&gn(o,ee);A.state.next({values:sn(s)}),A.state.next({...n,...K.keepDirty?{isDirty:ae()}:{}}),!K.keepIsValid&&x()},jt=({disabled:L,name:K})=>{if(xr(L)&&u.mount||L||c.disabled.has(K)){const Ae=c.disabled.has(K)!==!!L;L?c.disabled.add(K):c.disabled.delete(K),Ae&&u.mount&&!u.action&&x()}},Br=(L,K={})=>{let ee=xe(r,L);const pe=xr(K.disabled)||xr(t.disabled),Ae=!c.registerName.has(L)&&ee&&ee._f&&!ee._f.mount;return wt(r,L,{...ee||{},_f:{...ee&&ee._f?ee._f:{ref:{name:L}},name:L,mount:!0,...K}}),c.mount.add(L),ee&&!Ae?jt({disabled:xr(K.disabled)?K.disabled:t.disabled,name:L}):N(L,!0,K.value),{...pe?{disabled:K.disabled||t.disabled}:{},...t.progressive?{required:!!K.required,min:Ll(K.min),max:Ll(K.max),minLength:Ll(K.minLength),maxLength:Ll(K.maxLength),pattern:Ll(K.pattern)}:{},name:L,onChange:T,onBlur:T,ref:be=>{if(be){c.registerName.add(L),Br(L,K),c.registerName.delete(L),ee=xe(r,L);const ve=Yt(be.value)&&be.querySelectorAll&&be.querySelectorAll("input,select,textarea")[0]||be,Ee=KN(ve),Oe=ee._f.refs||[];if(Ee?Oe.find(ct=>ct===ve):ve===ee._f.ref)return;wt(r,L,{_f:{...ee._f,...Ee?{refs:[...Oe.filter(Wm),ve,...Array.isArray(xe(o,L))?[{}]:[]],ref:{type:ve.type,name:L}}:{ref:ve}}}),N(L,!1,void 0,ve)}else ee=xe(r,L,{}),ee._f&&(ee._f.mount=!1),(t.shouldUnregister||K.shouldUnregister)&&!(c_(c.array,L)&&u.action)&&c.unMount.add(L)}}},sr=()=>t.shouldFocusError&&!t.shouldUseNativeValidation&&Ol(r,J,c.mount),kr=L=>{xr(L)&&(A.state.next({disabled:L}),Ol(r,(K,ee)=>{const pe=xe(r,ee);pe&&(K.disabled=pe._f.disabled||L,Array.isArray(pe._f.refs)&&pe._f.refs.forEach(Ae=>{Ae.disabled=pe._f.disabled||L}))},0,!1))},ti=(L,K)=>async ee=>{let pe;ee&&(ee.preventDefault&&ee.preventDefault(),ee.persist&&ee.persist());let Ae=sn(s);if(A.state.next({isSubmitting:!0}),t.resolver){const{errors:be,values:ve}=await Q();E(),n.errors=be,Ae=sn(ve)}else await V({fields:r,eventType:Yo.SUBMIT});if(c.disabled.size)for(const be of c.disabled)gn(Ae,be);if(gn(n.errors,d_),Mn(n.errors)){A.state.next({errors:{}});try{await L(Ae,ee)}catch(be){pe=be}}else K&&await K({...n.errors},ee),sr(),setTimeout(sr);if(A.state.next({isSubmitted:!0,isSubmitting:!1,isSubmitSuccessful:Mn(n.errors)&&!pe,submitCount:n.submitCount+1,errors:n.errors}),pe)throw pe},er=(L,K={})=>{xe(r,L)&&(Yt(K.defaultValue)?z(L,sn(xe(o,L))):(z(L,K.defaultValue),wt(o,L,sn(K.defaultValue))),K.keepTouched||gn(n.touchedFields,L),K.keepDirty||(gn(n.dirtyFields,L),n.isDirty=K.defaultValue?ae(L,sn(xe(o,L))):ae()),K.keepError||(gn(n.errors,L),g.isValid&&x()),A.state.next({...n}))},ni=(L,K={})=>{const ee=L?sn(L):o,pe=sn(ee),Ae=Mn(L),be=pe;if(K.keepDefaultValues||(o=ee),!K.keepValues){if(K.keepDirtyValues){const ve=new Set([...c.mount,...Object.keys(Yi(o,s))]);for(const Ee of Array.from(ve)){const Oe=xe(n.dirtyFields,Ee),ct=xe(s,Ee),qn=xe(be,Ee);Oe&&!Yt(ct)?wt(be,Ee,ct):!Oe&&!Yt(qn)&&z(Ee,qn)}}else{if(Zd&&Yt(L))for(const ve of c.mount){const Ee=xe(r,ve);if(Ee&&Ee._f){const Oe=Array.isArray(Ee._f.refs)?Ee._f.refs[0]:Ee._f.ref;if($d(Oe)){const ct=Oe.closest("form");if(ct){ct.reset();break}}}}if(K.keepFieldsRef)for(const ve of c.mount)z(ve,xe(be,ve));else r={}}if(t.shouldUnregister){if(s=K.keepDefaultValues?sn(o):{},K.keepFieldsRef)for(const ve of c.mount)wt(s,ve,xe(be,ve))}else s=sn(be);A.array.next({values:{...be}}),A.state.next({values:{...be}})}c={mount:K.keepDirtyValues?c.mount:new Set,unMount:new Set,array:new Set,registerName:new Set,disabled:new Set,watch:new Set,watchAll:!1,focus:""},u.mount=!g.isValid||!!K.keepIsValid||!!K.keepDirtyValues||!t.shouldUnregister&&!Mn(be),u.watch=!!t.shouldUnregister,u.keepIsValid=!!K.keepIsValid,u.action=!1,K.keepErrors||(n.errors={}),A.state.next({submitCount:K.keepSubmitCount?n.submitCount:0,isDirty:Ae?!1:K.keepDirty?n.isDirty:K.keepValues?ae():!!(K.keepDefaultValues&&!_r(L,o)),isSubmitted:K.keepIsSubmitted?n.isSubmitted:!1,dirtyFields:Ae?{}:K.keepDirtyValues?K.keepDefaultValues&&s?Yi(o,s):n.dirtyFields:K.keepDefaultValues&&L?Yi(o,L):K.keepDirty?n.dirtyFields:{},touchedFields:K.keepTouched?n.touchedFields:{},errors:K.keepErrors?n.errors:{},isSubmitSuccessful:K.keepIsSubmitSuccessful?n.isSubmitSuccessful:!1,isSubmitting:!1,defaultValues:o})},ri=(L,K)=>ni(Qn(L)?L(s):L,{...t.resetOptions,...K}),Nn=(L,K={})=>{const ee=xe(r,L),pe=ee&&ee._f;if(pe){const Ae=pe.refs?pe.refs[0]:pe.ref;Ae.focus&&setTimeout(()=>{Ae.focus(),K.shouldSelect&&Qn(Ae.select)&&Ae.select()})}},Ka=L=>{n={...n,...L}},qa={control:{register:Br,unregister:Wt,getFieldState:de,handleSubmit:ti,setError:Ce,_subscribe:Xe,_runSchema:Q,_updateIsValidating:E,_focusError:sr,_getWatch:j,_getDirty:ae,_setValid:x,_setFieldArray:F,_setDisabledField:jt,_setErrors:k,_getFieldArray:G,_reset:ni,_resetDefaultValues:()=>Qn(t.defaultValues)&&t.defaultValues().then(L=>{ri(L,t.resetOptions),A.state.next({isLoading:!1})}),_removeUnmounted:W,_disableForm:kr,_subjects:A,_proxyFormState:g,get _fields(){return r},get _formValues(){return s},get _state(){return u},set _state(L){u=L},get _defaultValues(){return o},get _names(){return c},set _names(L){c=L},get _formState(){return n},get _options(){return t},set _options(L){t={...t,...L}}},subscribe:st,trigger:le,register:Br,handleSubmit:ti,watch:Ke,setValue:z,setValues:O,getValues:me,reset:ri,resetField:er,resetDefaultValues:(L,K={})=>{if(o=sn(L),!K.keepDirty){const ee=Yi(o,s);n.dirtyFields=ee,n.isDirty=!Mn(ee)}K.keepIsValid||x(),A.state.next({...n,defaultValues:o})},clearErrors:ye,unregister:Wt,setError:Ce,setFocus:Nn,getFieldState:de};return{...qa,formControl:qa}}function Cr(e={}){const t=Y.useRef(void 0),n=Y.useRef(void 0),[r,o]=Y.useState(()=>({...sn(j_),isLoading:Qn(e.defaultValues),errors:e.errors||{},disabled:e.disabled||!1,defaultValues:Qn(e.defaultValues)?void 0:e.defaultValues}));if(!t.current)if(e.formControl)t.current={...e.formControl,formState:r},e.defaultValues&&!Qn(e.defaultValues)&&e.formControl.reset(e.defaultValues,e.resetOptions);else{const{formControl:u,...c}=oT(e);t.current={...c,formState:r}}const s=t.current.control;return s._options=e,Hm(()=>{const u=s._subscribe({formState:s._proxyFormState,callback:()=>o({...s._formState,defaultValues:s._defaultValues}),reRenderRoot:!0});return o(c=>({...c,isReady:!0})),s._formState.isReady=!0,u},[s]),Y.useEffect(()=>s._disableForm(e.disabled),[s,e.disabled]),Y.useEffect(()=>{e.mode&&(s._options.mode=e.mode),e.reValidateMode&&(s._options.reValidateMode=e.reValidateMode)},[s,e.mode,e.reValidateMode]),Y.useEffect(()=>{e.errors&&(s._setErrors(e.errors),s._focusError())},[s,e.errors]),Y.useEffect(()=>{e.shouldUnregister&&s._subjects.state.next({values:s._getWatch()})},[s,e.shouldUnregister]),Y.useEffect(()=>{if(s._proxyFormState.isDirty){const u=s._getDirty();u!==r.isDirty&&s._subjects.state.next({isDirty:u})}},[s,r.isDirty]),Y.useEffect(()=>{var u;e.values&&!_r(e.values,n.current)?(s._reset(e.values,{keepFieldsRef:!0,...s._options.resetOptions}),!((u=s._options.resetOptions)===null||u===void 0)&&u.keepIsValid||s._setValid(),n.current=e.values,o(c=>({...c}))):s._resetDefaultValues()},[s,e.values]),Y.useEffect(()=>{s._state.mount||(s._setValid(),s._state.mount=!0),s._state.watch&&(s._state.watch=!1,s._subjects.state.next({...s._formState})),s._removeUnmounted()}),t.current.formState=Y.useMemo(()=>h_(r,s),[s,r]),t.current}const P_=(e,t,n)=>{if(e&&"reportValidity"in e){const r=xe(n,t);e.setCustomValidity(r&&r.message||""),e.reportValidity()}},Jm=(e,t)=>{for(const n in t.fields){const r=t.fields[n];r&&r.ref&&"reportValidity"in r.ref?P_(r.ref,n,e):r&&r.refs&&r.refs.forEach(o=>P_(o,n,e))}},z_=(e,t)=>{t.shouldUseNativeValidation&&Jm(e,t);const n={};for(const r in e){const o=xe(t.fields,r),s=Object.assign(e[r]||{},{ref:o&&o.ref});if(iT(t.names||Object.keys(e),r)){const u=Object.assign({},xe(n,r));wt(u,"root",s),wt(n,r,u)}else wt(n,r,s)}return n},iT=(e,t)=>{const n=L_(t).replace(/[.*+?^${}()|\\]/g,"\\$&");return e.some(r=>L_(r).match(`^${n}\\.\\d+`))};function L_(e){return e.replace(/[\[\]]/g,"")}function O_(e,t,n){function r(c,d){var p;Object.defineProperty(c,"_zod",{value:c._zod??{},enumerable:!1}),(p=c._zod).traits??(p.traits=new Set),c._zod.traits.add(e),t(c,d);for(const m in u.prototype)m in c||Object.defineProperty(c,m,{value:u.prototype[m].bind(c)});c._zod.constr=u,c._zod.def=d}const o=n?.Parent??Object;class s extends o{}Object.defineProperty(s,"name",{value:e});function u(c){var d;const p=n?.Parent?new s:this;r(p,c),(d=p._zod).deferred??(d.deferred=[]);for(const m of p._zod.deferred)m();return p}return Object.defineProperty(u,"init",{value:r}),Object.defineProperty(u,Symbol.hasInstance,{value:c=>n?.Parent&&c instanceof n.Parent?!0:c?._zod?.traits?.has(e)}),Object.defineProperty(u,"name",{value:e}),u}class sT extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}}const uT={};function I_(e){return uT}function lT(e,t){return typeof t=="bigint"?t.toString():t}const U_=Error.captureStackTrace?Error.captureStackTrace:(...e)=>{};function ef(e){return typeof e=="string"?e:e?.message}function V_(e,t,n){const r={...e,path:e.path??[]};if(!e.message){const o=ef(e.inst?._zod.def?.error?.(e))??ef(t?.error?.(e))??ef(n.customError?.(e))??ef(n.localeError?.(e))??"Invalid input";r.message=o}return delete r.inst,delete r.continue,t?.reportInput||delete r.input,r}const H_=(e,t)=>{e.name="$ZodError",Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:t,enumerable:!1}),Object.defineProperty(e,"message",{get(){return JSON.stringify(t,lT,2)},enumerable:!0}),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},cT=O_("$ZodError",H_),Q_=O_("$ZodError",H_,{Parent:Error}),dT=(e=>(t,n,r,o)=>{const s=r?Object.assign(r,{async:!1}):{async:!1},u=t._zod.run({value:n,issues:[]},s);if(u instanceof Promise)throw new sT;if(u.issues.length){const c=new(o?.Err??e)(u.issues.map(d=>V_(d,s,I_())));throw U_(c,o?.callee),c}return u.value})(Q_),fT=(e=>async(t,n,r,o)=>{const s=r?Object.assign(r,{async:!0}):{async:!0};let u=t._zod.run({value:n,issues:[]},s);if(u instanceof Promise&&(u=await u),u.issues.length){const c=new(o?.Err??e)(u.issues.map(d=>V_(d,s,I_())));throw U_(c,o?.callee),c}return u.value})(Q_);function ep(){return ep=Object.assign?Object.assign.bind():function(e){for(var t=1;t0){var d=o.errors[0][0];n[c]={message:d.message,type:d.code}}else n[c]={message:u,type:s};if(o.code==="invalid_union"&&o.errors.forEach(function(g){return g.forEach(function(y){return e.push(ep({},y,{path:[].concat(o.path,y.path)}))})}),t){var p=n[c].types,m=p&&p[o.code];n[c]=Km(c,t,n,s,m?[].concat(m,o.message):o.message)}e.shift()};e.length;)r();return n}function $r(e,t,n){if(n===void 0&&(n={}),(function(r){return"_def"in r&&typeof r._def=="object"&&"typeName"in r._def})(e))return function(r,o,s){try{return Promise.resolve(G_(function(){return Promise.resolve(e[n.mode==="sync"?"parse":"parseAsync"](r,t)).then(function(u){return s.shouldUseNativeValidation&&Jm({},s),{errors:{},values:n.raw?Object.assign({},r):u}})},function(u){if((function(c){return Array.isArray(c?.issues)})(u))return{values:{},errors:z_(hT(u.errors,!s.shouldUseNativeValidation&&s.criteriaMode==="all"),s)};throw u}))}catch(u){return Promise.reject(u)}};if((function(r){return"_zod"in r&&typeof r._zod=="object"})(e))return function(r,o,s){try{return Promise.resolve(G_(function(){return Promise.resolve((n.mode==="sync"?dT:fT)(e,r,t)).then(function(u){return s.shouldUseNativeValidation&&Jm({},s),{errors:{},values:n.raw?Object.assign({},r):u}})},function(u){if((function(c){return c instanceof cT})(u))return{values:{},errors:z_(mT(u.issues,!s.shouldUseNativeValidation&&s.criteriaMode==="all"),s)};throw u}))}catch(u){return Promise.reject(u)}};throw new Error("Invalid input: not a Zod schema")}var Y_=Object.freeze({position:"absolute",border:0,width:1,height:1,padding:0,margin:-1,overflow:"hidden",clip:"rect(0, 0, 0, 0)",whiteSpace:"nowrap",wordWrap:"normal"}),pT="VisuallyHidden",K_=C.forwardRef((e,t)=>f.jsx(Te.span,{...e,ref:t,style:{...Y_,...e.style}}));K_.displayName=pT;var gT=K_,[tf]=Vn("Tooltip",[Qo]),nf=Qo(),q_="TooltipProvider",vT=700,tp="tooltip.open",[AT,np]=tf(q_),Z_=e=>{const{__scopeTooltip:t,delayDuration:n=vT,skipDelayDuration:r=300,disableHoverableContent:o=!1,children:s}=e,u=C.useRef(!0),c=C.useRef(!1),d=C.useRef(0);return C.useEffect(()=>{const p=d.current;return()=>window.clearTimeout(p)},[]),f.jsx(AT,{scope:t,isOpenDelayedRef:u,delayDuration:n,onOpen:C.useCallback(()=>{window.clearTimeout(d.current),u.current=!1},[]),onClose:C.useCallback(()=>{window.clearTimeout(d.current),d.current=window.setTimeout(()=>u.current=!0,r)},[r]),isPointerInTransitRef:c,onPointerInTransitChange:C.useCallback(p=>{c.current=p},[]),disableHoverableContent:o,children:s})};Z_.displayName=q_;var Il="Tooltip",[yT,Ul]=tf(Il),W_=e=>{const{__scopeTooltip:t,children:n,open:r,defaultOpen:o,onOpenChange:s,disableHoverableContent:u,delayDuration:c}=e,d=np(Il,e.__scopeTooltip),p=nf(t),[m,g]=C.useState(null),y=or(),A=C.useRef(0),w=u??d.disableHoverableContent,b=c??d.delayDuration,x=C.useRef(!1),[E,S]=ir({prop:r,defaultProp:o??!1,onChange:N=>{N?(d.onOpen(),document.dispatchEvent(new CustomEvent(tp))):d.onClose(),s?.(N)},caller:Il}),F=C.useMemo(()=>E?x.current?"delayed-open":"instant-open":"closed",[E]),R=C.useCallback(()=>{window.clearTimeout(A.current),A.current=0,x.current=!1,S(!0)},[S]),k=C.useCallback(()=>{window.clearTimeout(A.current),A.current=0,S(!1)},[S]),B=C.useCallback(()=>{window.clearTimeout(A.current),A.current=window.setTimeout(()=>{x.current=!0,S(!0),A.current=0},b)},[b,S]);return C.useEffect(()=>()=>{A.current&&(window.clearTimeout(A.current),A.current=0)},[]),f.jsx(Gd,{...p,children:f.jsx(yT,{scope:t,contentId:y,open:E,stateAttribute:F,trigger:m,onTriggerChange:g,onTriggerEnter:C.useCallback(()=>{d.isOpenDelayedRef.current?B():R()},[d.isOpenDelayedRef,B,R]),onTriggerLeave:C.useCallback(()=>{w?k():(window.clearTimeout(A.current),A.current=0)},[k,w]),onOpen:R,onClose:k,disableHoverableContent:w,children:n})})};W_.displayName=Il;var rp="TooltipTrigger",X_=C.forwardRef((e,t)=>{const{__scopeTooltip:n,...r}=e,o=Ul(rp,n),s=np(rp,n),u=nf(n),c=C.useRef(null),d=nt(t,c,o.onTriggerChange),p=C.useRef(!1),m=C.useRef(!1),g=C.useCallback(()=>p.current=!1,[]);return C.useEffect(()=>()=>document.removeEventListener("pointerup",g),[g]),f.jsx(Tl,{asChild:!0,...u,children:f.jsx(Te.button,{"aria-describedby":o.open?o.contentId:void 0,"data-state":o.stateAttribute,...r,ref:d,onPointerMove:_e(e.onPointerMove,y=>{y.pointerType!=="touch"&&!m.current&&!s.isPointerInTransitRef.current&&(o.onTriggerEnter(),m.current=!0)}),onPointerLeave:_e(e.onPointerLeave,()=>{o.onTriggerLeave(),m.current=!1}),onPointerDown:_e(e.onPointerDown,()=>{o.open&&o.onClose(),p.current=!0,document.addEventListener("pointerup",g,{once:!0})}),onFocus:_e(e.onFocus,()=>{p.current||o.onOpen()}),onBlur:_e(e.onBlur,o.onClose),onClick:_e(e.onClick,o.onClose)})})});X_.displayName=rp;var ap="TooltipPortal",[bT,xT]=tf(ap,{forceMount:void 0}),$_=e=>{const{__scopeTooltip:t,forceMount:n,children:r,container:o}=e,s=Ul(ap,t);return f.jsx(bT,{scope:t,forceMount:n,children:f.jsx(Hn,{present:n||s.open,children:f.jsx(Us,{asChild:!0,container:o,children:r})})})};$_.displayName=ap;var $s="TooltipContent",J_=C.forwardRef((e,t)=>{const n=xT($s,e.__scopeTooltip),{forceMount:r=n.forceMount,side:o="top",...s}=e,u=Ul($s,e.__scopeTooltip);return f.jsx(Hn,{present:r||u.open,children:u.disableHoverableContent?f.jsx(eC,{side:o,...s,ref:t}):f.jsx(_T,{side:o,...s,ref:t})})}),_T=C.forwardRef((e,t)=>{const n=Ul($s,e.__scopeTooltip),r=np($s,e.__scopeTooltip),o=C.useRef(null),s=nt(t,o),[u,c]=C.useState(null),{trigger:d,onClose:p}=n,m=o.current,{onPointerInTransitChange:g}=r,y=C.useCallback(()=>{c(null),g(!1)},[g]),A=C.useCallback((w,b)=>{const x=w.currentTarget,E={x:w.clientX,y:w.clientY},S=ST(E,x.getBoundingClientRect()),F=DT(E,S),R=FT(b.getBoundingClientRect()),k=BT([...F,...R]);c(k),g(!0)},[g]);return C.useEffect(()=>()=>y(),[y]),C.useEffect(()=>{if(d&&m){const w=x=>A(x,m),b=x=>A(x,d);return d.addEventListener("pointerleave",w),m.addEventListener("pointerleave",b),()=>{d.removeEventListener("pointerleave",w),m.removeEventListener("pointerleave",b)}}},[d,m,A,y]),C.useEffect(()=>{if(u){const w=b=>{const x=b.target,E={x:b.clientX,y:b.clientY},S=d?.contains(x)||m?.contains(x),F=!RT(E,u);S?y():F&&(y(),p())};return document.addEventListener("pointermove",w),()=>document.removeEventListener("pointermove",w)}},[d,m,u,p,y]),f.jsx(eC,{...e,ref:s})}),[CT,wT]=tf(Il,{isInside:!1}),ET=Q2("TooltipContent"),eC=C.forwardRef((e,t)=>{const{__scopeTooltip:n,children:r,"aria-label":o,onEscapeKeyDown:s,onPointerDownOutside:u,...c}=e,d=Ul($s,n),p=nf(n),{onClose:m}=d;return C.useEffect(()=>(document.addEventListener(tp,m),()=>document.removeEventListener(tp,m)),[m]),C.useEffect(()=>{if(d.trigger){const g=y=>{y.target?.contains(d.trigger)&&m()};return window.addEventListener("scroll",g,{capture:!0}),()=>window.removeEventListener("scroll",g,{capture:!0})}},[d.trigger,m]),f.jsx(Is,{asChild:!0,disableOutsidePointerEvents:!1,onEscapeKeyDown:s,onPointerDownOutside:u,onFocusOutside:g=>g.preventDefault(),onDismiss:m,children:f.jsxs(Yd,{"data-state":d.stateAttribute,...p,...c,ref:t,style:{...c.style,"--radix-tooltip-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-tooltip-content-available-width":"var(--radix-popper-available-width)","--radix-tooltip-content-available-height":"var(--radix-popper-available-height)","--radix-tooltip-trigger-width":"var(--radix-popper-anchor-width)","--radix-tooltip-trigger-height":"var(--radix-popper-anchor-height)"},children:[f.jsx(ET,{children:r}),f.jsx(CT,{scope:n,isInside:!0,children:f.jsx(gT,{id:d.contentId,role:"tooltip",children:o||r})})]})})});J_.displayName=$s;var tC="TooltipArrow",nC=C.forwardRef((e,t)=>{const{__scopeTooltip:n,...r}=e,o=nf(n);return wT(tC,n).isInside?null:f.jsx(Kd,{...o,...r,ref:t})});nC.displayName=tC;function ST(e,t){const n=Math.abs(t.top-e.y),r=Math.abs(t.bottom-e.y),o=Math.abs(t.right-e.x),s=Math.abs(t.left-e.x);switch(Math.min(n,r,o,s)){case s:return"left";case o:return"right";case n:return"top";case r:return"bottom";default:throw new Error("unreachable")}}function DT(e,t,n=5){const r=[];switch(t){case"top":r.push({x:e.x-n,y:e.y+n},{x:e.x+n,y:e.y+n});break;case"bottom":r.push({x:e.x-n,y:e.y-n},{x:e.x+n,y:e.y-n});break;case"left":r.push({x:e.x+n,y:e.y-n},{x:e.x+n,y:e.y+n});break;case"right":r.push({x:e.x-n,y:e.y-n},{x:e.x-n,y:e.y+n});break}return r}function FT(e){const{top:t,right:n,bottom:r,left:o}=e;return[{x:o,y:t},{x:n,y:t},{x:n,y:r},{x:o,y:r}]}function RT(e,t){const{x:n,y:r}=e;let o=!1;for(let s=0,u=t.length-1;sr!=y>r&&n<(g-p)*(r-m)/(y-m)+p&&(o=!o)}return o}function BT(e){const t=e.slice();return t.sort((n,r)=>n.xr.x?1:n.yr.y?1:0),kT(t)}function kT(e){if(e.length<=1)return e.slice();const t=[];for(let r=0;r=2;){const s=t[t.length-1],u=t[t.length-2];if((s.x-u.x)*(o.y-u.y)>=(s.y-u.y)*(o.x-u.x))t.pop();else break}t.push(o)}t.pop();const n=[];for(let r=e.length-1;r>=0;r--){const o=e[r];for(;n.length>=2;){const s=n[n.length-1],u=n[n.length-2];if((s.x-u.x)*(o.y-u.y)>=(s.y-u.y)*(o.x-u.x))n.pop();else break}n.push(o)}return n.pop(),t.length===1&&n.length===1&&t[0].x===n[0].x&&t[0].y===n[0].y?t:t.concat(n)}var MT=Z_,NT=W_,TT=X_,jT=$_,rC=J_,PT=nC;function rf(e){const t=C.useRef({value:e,previous:e});return C.useMemo(()=>(t.current.value!==e&&(t.current.previous=t.current.value,t.current.value=e),t.current.previous),[e])}var af="Switch",[zT]=Vn(af),[LT,OT]=zT(af),aC=C.forwardRef((e,t)=>{const{__scopeSwitch:n,name:r,checked:o,defaultChecked:s,required:u,disabled:c,value:d="on",onCheckedChange:p,form:m,...g}=e,[y,A]=C.useState(null),w=nt(t,F=>A(F)),b=C.useRef(!1),x=y?m||!!y.closest("form"):!0,[E,S]=ir({prop:o,defaultProp:s??!1,onChange:p,caller:af});return f.jsxs(LT,{scope:n,checked:E,disabled:c,children:[f.jsx(Te.button,{type:"button",role:"switch","aria-checked":E,"aria-required":u,"data-state":uC(E),"data-disabled":c?"":void 0,disabled:c,value:d,...g,ref:w,onClick:_e(e.onClick,F=>{S(R=>!R),x&&(b.current=F.isPropagationStopped(),b.current||F.stopPropagation())})}),x&&f.jsx(sC,{control:y,bubbles:!b.current,name:r,value:d,checked:E,required:u,disabled:c,form:m,style:{transform:"translateX(-100%)"}})]})});aC.displayName=af;var oC="SwitchThumb",iC=C.forwardRef((e,t)=>{const{__scopeSwitch:n,...r}=e,o=OT(oC,n);return f.jsx(Te.span,{"data-state":uC(o.checked),"data-disabled":o.disabled?"":void 0,...r,ref:t})});iC.displayName=oC;var IT="SwitchBubbleInput",sC=C.forwardRef(({__scopeSwitch:e,control:t,checked:n,bubbles:r=!0,...o},s)=>{const u=C.useRef(null),c=nt(u,s),d=rf(n),p=Qd(t);return C.useEffect(()=>{const m=u.current;if(!m)return;const g=window.HTMLInputElement.prototype,A=Object.getOwnPropertyDescriptor(g,"checked").set;if(d!==n&&A){const w=new Event("click",{bubbles:r});A.call(m,n),m.dispatchEvent(w)}},[d,n,r]),f.jsx("input",{type:"checkbox","aria-hidden":!0,defaultChecked:n,...o,tabIndex:-1,ref:c,style:{...o.style,...p,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});sC.displayName=IT;function uC(e){return e?"checked":"unchecked"}var UT=aC,VT=iC;function Ko(e,t){return typeof e=="function"?e(t):e}function wr(e,t){return n=>{t.setState(r=>({...r,[e]:Ko(n,r[e])}))}}function of(e){return e instanceof Function}function HT(e){return Array.isArray(e)&&e.every(t=>typeof t=="number")}function QT(e,t){const n=[],r=o=>{o.forEach(s=>{n.push(s);const u=t(s);u!=null&&u.length&&r(u)})};return r(e),n}function ze(e,t,n){let r=[],o;return s=>{let u;n.key&&n.debug&&(u=Date.now());const c=e(s);if(!(c.length!==r.length||c.some((m,g)=>r[g]!==m)))return o;r=c;let p;if(n.key&&n.debug&&(p=Date.now()),o=t(...c),n==null||n.onChange==null||n.onChange(o),n.key&&n.debug&&n!=null&&n.debug()){const m=Math.round((Date.now()-u)*100)/100,g=Math.round((Date.now()-p)*100)/100,y=g/16,A=(w,b)=>{for(w=String(w);w.length{var o;return(o=e?.debugAll)!=null?o:e[t]},key:!1,onChange:r}}function GT(e,t,n,r){const o=()=>{var u;return(u=s.getValue())!=null?u:e.options.renderFallbackValue},s={id:`${t.id}_${n.id}`,row:t,column:n,getValue:()=>t.getValue(r),renderValue:o,getContext:ze(()=>[e,n,t,s],(u,c,d,p)=>({table:u,column:c,row:d,cell:p,getValue:p.getValue,renderValue:p.renderValue}),Le(e.options,"debugCells"))};return e._features.forEach(u=>{u.createCell==null||u.createCell(s,n,t,e)},{}),s}function YT(e,t,n,r){var o,s;const c={...e._getDefaultColumnDef(),...t},d=c.accessorKey;let p=(o=(s=c.id)!=null?s:d?typeof String.prototype.replaceAll=="function"?d.replaceAll(".","_"):d.replace(/\./g,"_"):void 0)!=null?o:typeof c.header=="string"?c.header:void 0,m;if(c.accessorFn?m=c.accessorFn:d&&(d.includes(".")?m=y=>{let A=y;for(const b of d.split(".")){var w;A=(w=A)==null?void 0:w[b]}return A}:m=y=>y[c.accessorKey]),!p)throw new Error;let g={id:`${String(p)}`,accessorFn:m,parent:r,depth:n,columnDef:c,columns:[],getFlatColumns:ze(()=>[!0],()=>{var y;return[g,...(y=g.columns)==null?void 0:y.flatMap(A=>A.getFlatColumns())]},Le(e.options,"debugColumns")),getLeafColumns:ze(()=>[e._getOrderColumnsFn()],y=>{var A;if((A=g.columns)!=null&&A.length){let w=g.columns.flatMap(b=>b.getLeafColumns());return y(w)}return[g]},Le(e.options,"debugColumns"))};for(const y of e._features)y.createColumn==null||y.createColumn(g,e);return g}const Yn="debugHeaders";function lC(e,t,n){var r;let s={id:(r=n.id)!=null?r:t.id,column:t,index:n.index,isPlaceholder:!!n.isPlaceholder,placeholderId:n.placeholderId,depth:n.depth,subHeaders:[],colSpan:0,rowSpan:0,headerGroup:null,getLeafHeaders:()=>{const u=[],c=d=>{d.subHeaders&&d.subHeaders.length&&d.subHeaders.map(c),u.push(d)};return c(s),u},getContext:()=>({table:e,header:s,column:t})};return e._features.forEach(u=>{u.createHeader==null||u.createHeader(s,e)}),s}const KT={createTable:e=>{e.getHeaderGroups=ze(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,o)=>{var s,u;const c=(s=r?.map(g=>n.find(y=>y.id===g)).filter(Boolean))!=null?s:[],d=(u=o?.map(g=>n.find(y=>y.id===g)).filter(Boolean))!=null?u:[],p=n.filter(g=>!(r!=null&&r.includes(g.id))&&!(o!=null&&o.includes(g.id)));return sf(t,[...c,...p,...d],e)},Le(e.options,Yn)),e.getCenterHeaderGroups=ze(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r,o)=>(n=n.filter(s=>!(r!=null&&r.includes(s.id))&&!(o!=null&&o.includes(s.id))),sf(t,n,e,"center")),Le(e.options,Yn)),e.getLeftHeaderGroups=ze(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.left],(t,n,r)=>{var o;const s=(o=r?.map(u=>n.find(c=>c.id===u)).filter(Boolean))!=null?o:[];return sf(t,s,e,"left")},Le(e.options,Yn)),e.getRightHeaderGroups=ze(()=>[e.getAllColumns(),e.getVisibleLeafColumns(),e.getState().columnPinning.right],(t,n,r)=>{var o;const s=(o=r?.map(u=>n.find(c=>c.id===u)).filter(Boolean))!=null?o:[];return sf(t,s,e,"right")},Le(e.options,Yn)),e.getFooterGroups=ze(()=>[e.getHeaderGroups()],t=>[...t].reverse(),Le(e.options,Yn)),e.getLeftFooterGroups=ze(()=>[e.getLeftHeaderGroups()],t=>[...t].reverse(),Le(e.options,Yn)),e.getCenterFooterGroups=ze(()=>[e.getCenterHeaderGroups()],t=>[...t].reverse(),Le(e.options,Yn)),e.getRightFooterGroups=ze(()=>[e.getRightHeaderGroups()],t=>[...t].reverse(),Le(e.options,Yn)),e.getFlatHeaders=ze(()=>[e.getHeaderGroups()],t=>t.map(n=>n.headers).flat(),Le(e.options,Yn)),e.getLeftFlatHeaders=ze(()=>[e.getLeftHeaderGroups()],t=>t.map(n=>n.headers).flat(),Le(e.options,Yn)),e.getCenterFlatHeaders=ze(()=>[e.getCenterHeaderGroups()],t=>t.map(n=>n.headers).flat(),Le(e.options,Yn)),e.getRightFlatHeaders=ze(()=>[e.getRightHeaderGroups()],t=>t.map(n=>n.headers).flat(),Le(e.options,Yn)),e.getCenterLeafHeaders=ze(()=>[e.getCenterFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),Le(e.options,Yn)),e.getLeftLeafHeaders=ze(()=>[e.getLeftFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),Le(e.options,Yn)),e.getRightLeafHeaders=ze(()=>[e.getRightFlatHeaders()],t=>t.filter(n=>{var r;return!((r=n.subHeaders)!=null&&r.length)}),Le(e.options,Yn)),e.getLeafHeaders=ze(()=>[e.getLeftHeaderGroups(),e.getCenterHeaderGroups(),e.getRightHeaderGroups()],(t,n,r)=>{var o,s,u,c,d,p;return[...(o=(s=t[0])==null?void 0:s.headers)!=null?o:[],...(u=(c=n[0])==null?void 0:c.headers)!=null?u:[],...(d=(p=r[0])==null?void 0:p.headers)!=null?d:[]].map(m=>m.getLeafHeaders()).flat()},Le(e.options,Yn))}};function sf(e,t,n,r){var o,s;let u=0;const c=function(y,A){A===void 0&&(A=1),u=Math.max(u,A),y.filter(w=>w.getIsVisible()).forEach(w=>{var b;(b=w.columns)!=null&&b.length&&c(w.columns,A+1)},0)};c(e);let d=[];const p=(y,A)=>{const w={depth:A,id:[r,`${A}`].filter(Boolean).join("_"),headers:[]},b=[];y.forEach(x=>{const E=[...b].reverse()[0],S=x.column.depth===w.depth;let F,R=!1;if(S&&x.column.parent?F=x.column.parent:(F=x.column,R=!0),E&&E?.column===F)E.subHeaders.push(x);else{const k=lC(n,F,{id:[r,A,F.id,x?.id].filter(Boolean).join("_"),isPlaceholder:R,placeholderId:R?`${b.filter(B=>B.column===F).length}`:void 0,depth:A,index:b.length});k.subHeaders.push(x),b.push(k)}w.headers.push(x),x.headerGroup=w}),d.push(w),A>0&&p(b,A-1)},m=t.map((y,A)=>lC(n,y,{depth:u,index:A}));p(m,u-1),d.reverse();const g=y=>y.filter(w=>w.column.getIsVisible()).map(w=>{let b=0,x=0,E=[0];w.subHeaders&&w.subHeaders.length?(E=[],g(w.subHeaders).forEach(F=>{let{colSpan:R,rowSpan:k}=F;b+=R,E.push(k)})):b=1;const S=Math.min(...E);return x=x+S,w.colSpan=b,w.rowSpan=x,{colSpan:b,rowSpan:x}});return g((o=(s=d[0])==null?void 0:s.headers)!=null?o:[]),d}const qT=(e,t,n,r,o,s,u)=>{let c={id:t,index:r,original:n,depth:o,parentId:u,_valuesCache:{},_uniqueValuesCache:{},getValue:d=>{if(c._valuesCache.hasOwnProperty(d))return c._valuesCache[d];const p=e.getColumn(d);if(p!=null&&p.accessorFn)return c._valuesCache[d]=p.accessorFn(c.original,r),c._valuesCache[d]},getUniqueValues:d=>{if(c._uniqueValuesCache.hasOwnProperty(d))return c._uniqueValuesCache[d];const p=e.getColumn(d);if(p!=null&&p.accessorFn)return p.columnDef.getUniqueValues?(c._uniqueValuesCache[d]=p.columnDef.getUniqueValues(c.original,r),c._uniqueValuesCache[d]):(c._uniqueValuesCache[d]=[c.getValue(d)],c._uniqueValuesCache[d])},renderValue:d=>{var p;return(p=c.getValue(d))!=null?p:e.options.renderFallbackValue},subRows:[],getLeafRows:()=>QT(c.subRows,d=>d.subRows),getParentRow:()=>c.parentId?e.getRow(c.parentId,!0):void 0,getParentRows:()=>{let d=[],p=c;for(;;){const m=p.getParentRow();if(!m)break;d.push(m),p=m}return d.reverse()},getAllCells:ze(()=>[e.getAllLeafColumns()],d=>d.map(p=>GT(e,c,p,p.id)),Le(e.options,"debugRows")),_getAllCellsByColumnId:ze(()=>[c.getAllCells()],d=>d.reduce((p,m)=>(p[m.column.id]=m,p),{}),Le(e.options,"debugRows"))};for(let d=0;d{e._getFacetedRowModel=t.options.getFacetedRowModel&&t.options.getFacetedRowModel(t,e.id),e.getFacetedRowModel=()=>e._getFacetedRowModel?e._getFacetedRowModel():t.getPreFilteredRowModel(),e._getFacetedUniqueValues=t.options.getFacetedUniqueValues&&t.options.getFacetedUniqueValues(t,e.id),e.getFacetedUniqueValues=()=>e._getFacetedUniqueValues?e._getFacetedUniqueValues():new Map,e._getFacetedMinMaxValues=t.options.getFacetedMinMaxValues&&t.options.getFacetedMinMaxValues(t,e.id),e.getFacetedMinMaxValues=()=>{if(e._getFacetedMinMaxValues)return e._getFacetedMinMaxValues()}}},cC=(e,t,n)=>{var r,o;const s=n==null||(r=n.toString())==null?void 0:r.toLowerCase();return!!(!((o=e.getValue(t))==null||(o=o.toString())==null||(o=o.toLowerCase())==null)&&o.includes(s))};cC.autoRemove=e=>Aa(e);const dC=(e,t,n)=>{var r;return!!(!((r=e.getValue(t))==null||(r=r.toString())==null)&&r.includes(n))};dC.autoRemove=e=>Aa(e);const fC=(e,t,n)=>{var r;return((r=e.getValue(t))==null||(r=r.toString())==null?void 0:r.toLowerCase())===n?.toLowerCase()};fC.autoRemove=e=>Aa(e);const hC=(e,t,n)=>{var r;return(r=e.getValue(t))==null?void 0:r.includes(n)};hC.autoRemove=e=>Aa(e);const mC=(e,t,n)=>!n.some(r=>{var o;return!((o=e.getValue(t))!=null&&o.includes(r))});mC.autoRemove=e=>Aa(e)||!(e!=null&&e.length);const pC=(e,t,n)=>n.some(r=>{var o;return(o=e.getValue(t))==null?void 0:o.includes(r)});pC.autoRemove=e=>Aa(e)||!(e!=null&&e.length);const gC=(e,t,n)=>e.getValue(t)===n;gC.autoRemove=e=>Aa(e);const vC=(e,t,n)=>e.getValue(t)==n;vC.autoRemove=e=>Aa(e);const op=(e,t,n)=>{let[r,o]=n;const s=e.getValue(t);return s>=r&&s<=o};op.resolveFilterValue=e=>{let[t,n]=e,r=typeof t!="number"?parseFloat(t):t,o=typeof n!="number"?parseFloat(n):n,s=t===null||Number.isNaN(r)?-1/0:r,u=n===null||Number.isNaN(o)?1/0:o;if(s>u){const c=s;s=u,u=c}return[s,u]},op.autoRemove=e=>Aa(e)||Aa(e[0])&&Aa(e[1]);const co={includesString:cC,includesStringSensitive:dC,equalsString:fC,arrIncludes:hC,arrIncludesAll:mC,arrIncludesSome:pC,equals:gC,weakEquals:vC,inNumberRange:op};function Aa(e){return e==null||e===""}const WT={getDefaultColumnDef:()=>({filterFn:"auto"}),getInitialState:e=>({columnFilters:[],...e}),getDefaultOptions:e=>({onColumnFiltersChange:wr("columnFilters",e),filterFromLeafRows:!1,maxLeafRowFilterDepth:100}),createColumn:(e,t)=>{e.getAutoFilterFn=()=>{const n=t.getCoreRowModel().flatRows[0],r=n?.getValue(e.id);return typeof r=="string"?co.includesString:typeof r=="number"?co.inNumberRange:typeof r=="boolean"||r!==null&&typeof r=="object"?co.equals:Array.isArray(r)?co.arrIncludes:co.weakEquals},e.getFilterFn=()=>{var n,r;return of(e.columnDef.filterFn)?e.columnDef.filterFn:e.columnDef.filterFn==="auto"?e.getAutoFilterFn():(n=(r=t.options.filterFns)==null?void 0:r[e.columnDef.filterFn])!=null?n:co[e.columnDef.filterFn]},e.getCanFilter=()=>{var n,r,o;return((n=e.columnDef.enableColumnFilter)!=null?n:!0)&&((r=t.options.enableColumnFilters)!=null?r:!0)&&((o=t.options.enableFilters)!=null?o:!0)&&!!e.accessorFn},e.getIsFiltered=()=>e.getFilterIndex()>-1,e.getFilterValue=()=>{var n;return(n=t.getState().columnFilters)==null||(n=n.find(r=>r.id===e.id))==null?void 0:n.value},e.getFilterIndex=()=>{var n,r;return(n=(r=t.getState().columnFilters)==null?void 0:r.findIndex(o=>o.id===e.id))!=null?n:-1},e.setFilterValue=n=>{t.setColumnFilters(r=>{const o=e.getFilterFn(),s=r?.find(m=>m.id===e.id),u=Ko(n,s?s.value:void 0);if(AC(o,u,e)){var c;return(c=r?.filter(m=>m.id!==e.id))!=null?c:[]}const d={id:e.id,value:u};if(s){var p;return(p=r?.map(m=>m.id===e.id?d:m))!=null?p:[]}return r!=null&&r.length?[...r,d]:[d]})}},createRow:(e,t)=>{e.columnFilters={},e.columnFiltersMeta={}},createTable:e=>{e.setColumnFilters=t=>{const n=e.getAllLeafColumns(),r=o=>{var s;return(s=Ko(t,o))==null?void 0:s.filter(u=>{const c=n.find(d=>d.id===u.id);if(c){const d=c.getFilterFn();if(AC(d,u.value,c))return!1}return!0})};e.options.onColumnFiltersChange==null||e.options.onColumnFiltersChange(r)},e.resetColumnFilters=t=>{var n,r;e.setColumnFilters(t?[]:(n=(r=e.initialState)==null?void 0:r.columnFilters)!=null?n:[])},e.getPreFilteredRowModel=()=>e.getCoreRowModel(),e.getFilteredRowModel=()=>(!e._getFilteredRowModel&&e.options.getFilteredRowModel&&(e._getFilteredRowModel=e.options.getFilteredRowModel(e)),e.options.manualFiltering||!e._getFilteredRowModel?e.getPreFilteredRowModel():e._getFilteredRowModel())}};function AC(e,t,n){return(e&&e.autoRemove?e.autoRemove(t,n):!1)||typeof t>"u"||typeof t=="string"&&!t}const ip={sum:(e,t,n)=>n.reduce((r,o)=>{const s=o.getValue(e);return r+(typeof s=="number"?s:0)},0),min:(e,t,n)=>{let r;return n.forEach(o=>{const s=o.getValue(e);s!=null&&(r>s||r===void 0&&s>=s)&&(r=s)}),r},max:(e,t,n)=>{let r;return n.forEach(o=>{const s=o.getValue(e);s!=null&&(r=s)&&(r=s)}),r},extent:(e,t,n)=>{let r,o;return n.forEach(s=>{const u=s.getValue(e);u!=null&&(r===void 0?u>=u&&(r=o=u):(r>u&&(r=u),o{let n=0,r=0;if(t.forEach(o=>{let s=o.getValue(e);s!=null&&(s=+s)>=s&&(++n,r+=s)}),n)return r/n},median:(e,t)=>{if(!t.length)return;const n=t.map(s=>s.getValue(e));if(!HT(n))return;if(n.length===1)return n[0];const r=Math.floor(n.length/2),o=n.sort((s,u)=>s-u);return n.length%2!==0?o[r]:(o[r-1]+o[r])/2},unique:(e,t)=>Array.from(new Set(t.map(n=>n.getValue(e))).values()),uniqueCount:(e,t)=>new Set(t.map(n=>n.getValue(e))).size,count:(e,t)=>t.length},XT={getDefaultColumnDef:()=>({aggregatedCell:e=>{var t,n;return(t=(n=e.getValue())==null||n.toString==null?void 0:n.toString())!=null?t:null},aggregationFn:"auto"}),getInitialState:e=>({grouping:[],...e}),getDefaultOptions:e=>({onGroupingChange:wr("grouping",e),groupedColumnMode:"reorder"}),createColumn:(e,t)=>{e.toggleGrouping=()=>{t.setGrouping(n=>n!=null&&n.includes(e.id)?n.filter(r=>r!==e.id):[...n??[],e.id])},e.getCanGroup=()=>{var n,r;return((n=e.columnDef.enableGrouping)!=null?n:!0)&&((r=t.options.enableGrouping)!=null?r:!0)&&(!!e.accessorFn||!!e.columnDef.getGroupingValue)},e.getIsGrouped=()=>{var n;return(n=t.getState().grouping)==null?void 0:n.includes(e.id)},e.getGroupedIndex=()=>{var n;return(n=t.getState().grouping)==null?void 0:n.indexOf(e.id)},e.getToggleGroupingHandler=()=>{const n=e.getCanGroup();return()=>{n&&e.toggleGrouping()}},e.getAutoAggregationFn=()=>{const n=t.getCoreRowModel().flatRows[0],r=n?.getValue(e.id);if(typeof r=="number")return ip.sum;if(Object.prototype.toString.call(r)==="[object Date]")return ip.extent},e.getAggregationFn=()=>{var n,r;if(!e)throw new Error;return of(e.columnDef.aggregationFn)?e.columnDef.aggregationFn:e.columnDef.aggregationFn==="auto"?e.getAutoAggregationFn():(n=(r=t.options.aggregationFns)==null?void 0:r[e.columnDef.aggregationFn])!=null?n:ip[e.columnDef.aggregationFn]}},createTable:e=>{e.setGrouping=t=>e.options.onGroupingChange==null?void 0:e.options.onGroupingChange(t),e.resetGrouping=t=>{var n,r;e.setGrouping(t?[]:(n=(r=e.initialState)==null?void 0:r.grouping)!=null?n:[])},e.getPreGroupedRowModel=()=>e.getFilteredRowModel(),e.getGroupedRowModel=()=>(!e._getGroupedRowModel&&e.options.getGroupedRowModel&&(e._getGroupedRowModel=e.options.getGroupedRowModel(e)),e.options.manualGrouping||!e._getGroupedRowModel?e.getPreGroupedRowModel():e._getGroupedRowModel())},createRow:(e,t)=>{e.getIsGrouped=()=>!!e.groupingColumnId,e.getGroupingValue=n=>{if(e._groupingValuesCache.hasOwnProperty(n))return e._groupingValuesCache[n];const r=t.getColumn(n);return r!=null&&r.columnDef.getGroupingValue?(e._groupingValuesCache[n]=r.columnDef.getGroupingValue(e.original),e._groupingValuesCache[n]):e.getValue(n)},e._groupingValuesCache={}},createCell:(e,t,n,r)=>{e.getIsGrouped=()=>t.getIsGrouped()&&t.id===n.groupingColumnId,e.getIsPlaceholder=()=>!e.getIsGrouped()&&t.getIsGrouped(),e.getIsAggregated=()=>{var o;return!e.getIsGrouped()&&!e.getIsPlaceholder()&&!!((o=n.subRows)!=null&&o.length)}}};function $T(e,t,n){if(!(t!=null&&t.length)||!n)return e;const r=e.filter(s=>!t.includes(s.id));return n==="remove"?r:[...t.map(s=>e.find(u=>u.id===s)).filter(Boolean),...r]}const JT={getInitialState:e=>({columnOrder:[],...e}),getDefaultOptions:e=>({onColumnOrderChange:wr("columnOrder",e)}),createColumn:(e,t)=>{e.getIndex=ze(n=>[Vl(t,n)],n=>n.findIndex(r=>r.id===e.id),Le(t.options,"debugColumns")),e.getIsFirstColumn=n=>{var r;return((r=Vl(t,n)[0])==null?void 0:r.id)===e.id},e.getIsLastColumn=n=>{var r;const o=Vl(t,n);return((r=o[o.length-1])==null?void 0:r.id)===e.id}},createTable:e=>{e.setColumnOrder=t=>e.options.onColumnOrderChange==null?void 0:e.options.onColumnOrderChange(t),e.resetColumnOrder=t=>{var n;e.setColumnOrder(t?[]:(n=e.initialState.columnOrder)!=null?n:[])},e._getOrderColumnsFn=ze(()=>[e.getState().columnOrder,e.getState().grouping,e.options.groupedColumnMode],(t,n,r)=>o=>{let s=[];if(!(t!=null&&t.length))s=o;else{const u=[...t],c=[...o];for(;c.length&&u.length;){const d=u.shift(),p=c.findIndex(m=>m.id===d);p>-1&&s.push(c.splice(p,1)[0])}s=[...s,...c]}return $T(s,n,r)},Le(e.options,"debugTable"))}},sp=()=>({left:[],right:[]}),ej={getInitialState:e=>({columnPinning:sp(),...e}),getDefaultOptions:e=>({onColumnPinningChange:wr("columnPinning",e)}),createColumn:(e,t)=>{e.pin=n=>{const r=e.getLeafColumns().map(o=>o.id).filter(Boolean);t.setColumnPinning(o=>{var s,u;if(n==="right"){var c,d;return{left:((c=o?.left)!=null?c:[]).filter(g=>!(r!=null&&r.includes(g))),right:[...((d=o?.right)!=null?d:[]).filter(g=>!(r!=null&&r.includes(g))),...r]}}if(n==="left"){var p,m;return{left:[...((p=o?.left)!=null?p:[]).filter(g=>!(r!=null&&r.includes(g))),...r],right:((m=o?.right)!=null?m:[]).filter(g=>!(r!=null&&r.includes(g)))}}return{left:((s=o?.left)!=null?s:[]).filter(g=>!(r!=null&&r.includes(g))),right:((u=o?.right)!=null?u:[]).filter(g=>!(r!=null&&r.includes(g)))}})},e.getCanPin=()=>e.getLeafColumns().some(r=>{var o,s,u;return((o=r.columnDef.enablePinning)!=null?o:!0)&&((s=(u=t.options.enableColumnPinning)!=null?u:t.options.enablePinning)!=null?s:!0)}),e.getIsPinned=()=>{const n=e.getLeafColumns().map(c=>c.id),{left:r,right:o}=t.getState().columnPinning,s=n.some(c=>r?.includes(c)),u=n.some(c=>o?.includes(c));return s?"left":u?"right":!1},e.getPinnedIndex=()=>{var n,r;const o=e.getIsPinned();return o?(n=(r=t.getState().columnPinning)==null||(r=r[o])==null?void 0:r.indexOf(e.id))!=null?n:-1:0}},createRow:(e,t)=>{e.getCenterVisibleCells=ze(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left,t.getState().columnPinning.right],(n,r,o)=>{const s=[...r??[],...o??[]];return n.filter(u=>!s.includes(u.column.id))},Le(t.options,"debugRows")),e.getLeftVisibleCells=ze(()=>[e._getAllVisibleCells(),t.getState().columnPinning.left],(n,r)=>(r??[]).map(s=>n.find(u=>u.column.id===s)).filter(Boolean).map(s=>({...s,position:"left"})),Le(t.options,"debugRows")),e.getRightVisibleCells=ze(()=>[e._getAllVisibleCells(),t.getState().columnPinning.right],(n,r)=>(r??[]).map(s=>n.find(u=>u.column.id===s)).filter(Boolean).map(s=>({...s,position:"right"})),Le(t.options,"debugRows"))},createTable:e=>{e.setColumnPinning=t=>e.options.onColumnPinningChange==null?void 0:e.options.onColumnPinningChange(t),e.resetColumnPinning=t=>{var n,r;return e.setColumnPinning(t?sp():(n=(r=e.initialState)==null?void 0:r.columnPinning)!=null?n:sp())},e.getIsSomeColumnsPinned=t=>{var n;const r=e.getState().columnPinning;if(!t){var o,s;return!!((o=r.left)!=null&&o.length||(s=r.right)!=null&&s.length)}return!!((n=r[t])!=null&&n.length)},e.getLeftLeafColumns=ze(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left],(t,n)=>(n??[]).map(r=>t.find(o=>o.id===r)).filter(Boolean),Le(e.options,"debugColumns")),e.getRightLeafColumns=ze(()=>[e.getAllLeafColumns(),e.getState().columnPinning.right],(t,n)=>(n??[]).map(r=>t.find(o=>o.id===r)).filter(Boolean),Le(e.options,"debugColumns")),e.getCenterLeafColumns=ze(()=>[e.getAllLeafColumns(),e.getState().columnPinning.left,e.getState().columnPinning.right],(t,n,r)=>{const o=[...n??[],...r??[]];return t.filter(s=>!o.includes(s.id))},Le(e.options,"debugColumns"))}};function tj(e){return e||(typeof document<"u"?document:null)}const uf={size:150,minSize:20,maxSize:Number.MAX_SAFE_INTEGER},up=()=>({startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,isResizingColumn:!1,columnSizingStart:[]}),nj={getDefaultColumnDef:()=>uf,getInitialState:e=>({columnSizing:{},columnSizingInfo:up(),...e}),getDefaultOptions:e=>({columnResizeMode:"onEnd",columnResizeDirection:"ltr",onColumnSizingChange:wr("columnSizing",e),onColumnSizingInfoChange:wr("columnSizingInfo",e)}),createColumn:(e,t)=>{e.getSize=()=>{var n,r,o;const s=t.getState().columnSizing[e.id];return Math.min(Math.max((n=e.columnDef.minSize)!=null?n:uf.minSize,(r=s??e.columnDef.size)!=null?r:uf.size),(o=e.columnDef.maxSize)!=null?o:uf.maxSize)},e.getStart=ze(n=>[n,Vl(t,n),t.getState().columnSizing],(n,r)=>r.slice(0,e.getIndex(n)).reduce((o,s)=>o+s.getSize(),0),Le(t.options,"debugColumns")),e.getAfter=ze(n=>[n,Vl(t,n),t.getState().columnSizing],(n,r)=>r.slice(e.getIndex(n)+1).reduce((o,s)=>o+s.getSize(),0),Le(t.options,"debugColumns")),e.resetSize=()=>{t.setColumnSizing(n=>{let{[e.id]:r,...o}=n;return o})},e.getCanResize=()=>{var n,r;return((n=e.columnDef.enableResizing)!=null?n:!0)&&((r=t.options.enableColumnResizing)!=null?r:!0)},e.getIsResizing=()=>t.getState().columnSizingInfo.isResizingColumn===e.id},createHeader:(e,t)=>{e.getSize=()=>{let n=0;const r=o=>{if(o.subHeaders.length)o.subHeaders.forEach(r);else{var s;n+=(s=o.column.getSize())!=null?s:0}};return r(e),n},e.getStart=()=>{if(e.index>0){const n=e.headerGroup.headers[e.index-1];return n.getStart()+n.getSize()}return 0},e.getResizeHandler=n=>{const r=t.getColumn(e.column.id),o=r?.getCanResize();return s=>{if(!r||!o||(s.persist==null||s.persist(),lp(s)&&s.touches&&s.touches.length>1))return;const u=e.getSize(),c=e?e.getLeafHeaders().map(E=>[E.column.id,E.column.getSize()]):[[r.id,r.getSize()]],d=lp(s)?Math.round(s.touches[0].clientX):s.clientX,p={},m=(E,S)=>{typeof S=="number"&&(t.setColumnSizingInfo(F=>{var R,k;const B=t.options.columnResizeDirection==="rtl"?-1:1,N=(S-((R=F?.startOffset)!=null?R:0))*B,P=Math.max(N/((k=F?.startSize)!=null?k:0),-.999999);return F.columnSizingStart.forEach(U=>{let[Q,$]=U;p[Q]=Math.round(Math.max($+$*P,0)*100)/100}),{...F,deltaOffset:N,deltaPercentage:P}}),(t.options.columnResizeMode==="onChange"||E==="end")&&t.setColumnSizing(F=>({...F,...p})))},g=E=>m("move",E),y=E=>{m("end",E),t.setColumnSizingInfo(S=>({...S,isResizingColumn:!1,startOffset:null,startSize:null,deltaOffset:null,deltaPercentage:null,columnSizingStart:[]}))},A=tj(n),w={moveHandler:E=>g(E.clientX),upHandler:E=>{A?.removeEventListener("mousemove",w.moveHandler),A?.removeEventListener("mouseup",w.upHandler),y(E.clientX)}},b={moveHandler:E=>(E.cancelable&&(E.preventDefault(),E.stopPropagation()),g(E.touches[0].clientX),!1),upHandler:E=>{var S;A?.removeEventListener("touchmove",b.moveHandler),A?.removeEventListener("touchend",b.upHandler),E.cancelable&&(E.preventDefault(),E.stopPropagation()),y((S=E.touches[0])==null?void 0:S.clientX)}},x=rj()?{passive:!1}:!1;lp(s)?(A?.addEventListener("touchmove",b.moveHandler,x),A?.addEventListener("touchend",b.upHandler,x)):(A?.addEventListener("mousemove",w.moveHandler,x),A?.addEventListener("mouseup",w.upHandler,x)),t.setColumnSizingInfo(E=>({...E,startOffset:d,startSize:u,deltaOffset:0,deltaPercentage:0,columnSizingStart:c,isResizingColumn:r.id}))}}},createTable:e=>{e.setColumnSizing=t=>e.options.onColumnSizingChange==null?void 0:e.options.onColumnSizingChange(t),e.setColumnSizingInfo=t=>e.options.onColumnSizingInfoChange==null?void 0:e.options.onColumnSizingInfoChange(t),e.resetColumnSizing=t=>{var n;e.setColumnSizing(t?{}:(n=e.initialState.columnSizing)!=null?n:{})},e.resetHeaderSizeInfo=t=>{var n;e.setColumnSizingInfo(t?up():(n=e.initialState.columnSizingInfo)!=null?n:up())},e.getTotalSize=()=>{var t,n;return(t=(n=e.getHeaderGroups()[0])==null?void 0:n.headers.reduce((r,o)=>r+o.getSize(),0))!=null?t:0},e.getLeftTotalSize=()=>{var t,n;return(t=(n=e.getLeftHeaderGroups()[0])==null?void 0:n.headers.reduce((r,o)=>r+o.getSize(),0))!=null?t:0},e.getCenterTotalSize=()=>{var t,n;return(t=(n=e.getCenterHeaderGroups()[0])==null?void 0:n.headers.reduce((r,o)=>r+o.getSize(),0))!=null?t:0},e.getRightTotalSize=()=>{var t,n;return(t=(n=e.getRightHeaderGroups()[0])==null?void 0:n.headers.reduce((r,o)=>r+o.getSize(),0))!=null?t:0}}};let lf=null;function rj(){if(typeof lf=="boolean")return lf;let e=!1;try{const t={get passive(){return e=!0,!1}},n=()=>{};window.addEventListener("test",n,t),window.removeEventListener("test",n)}catch{e=!1}return lf=e,lf}function lp(e){return e.type==="touchstart"}const aj={getInitialState:e=>({columnVisibility:{},...e}),getDefaultOptions:e=>({onColumnVisibilityChange:wr("columnVisibility",e)}),createColumn:(e,t)=>{e.toggleVisibility=n=>{e.getCanHide()&&t.setColumnVisibility(r=>({...r,[e.id]:n??!e.getIsVisible()}))},e.getIsVisible=()=>{var n,r;const o=e.columns;return(n=o.length?o.some(s=>s.getIsVisible()):(r=t.getState().columnVisibility)==null?void 0:r[e.id])!=null?n:!0},e.getCanHide=()=>{var n,r;return((n=e.columnDef.enableHiding)!=null?n:!0)&&((r=t.options.enableHiding)!=null?r:!0)},e.getToggleVisibilityHandler=()=>n=>{e.toggleVisibility==null||e.toggleVisibility(n.target.checked)}},createRow:(e,t)=>{e._getAllVisibleCells=ze(()=>[e.getAllCells(),t.getState().columnVisibility],n=>n.filter(r=>r.column.getIsVisible()),Le(t.options,"debugRows")),e.getVisibleCells=ze(()=>[e.getLeftVisibleCells(),e.getCenterVisibleCells(),e.getRightVisibleCells()],(n,r,o)=>[...n,...r,...o],Le(t.options,"debugRows"))},createTable:e=>{const t=(n,r)=>ze(()=>[r(),r().filter(o=>o.getIsVisible()).map(o=>o.id).join("_")],o=>o.filter(s=>s.getIsVisible==null?void 0:s.getIsVisible()),Le(e.options,"debugColumns"));e.getVisibleFlatColumns=t("getVisibleFlatColumns",()=>e.getAllFlatColumns()),e.getVisibleLeafColumns=t("getVisibleLeafColumns",()=>e.getAllLeafColumns()),e.getLeftVisibleLeafColumns=t("getLeftVisibleLeafColumns",()=>e.getLeftLeafColumns()),e.getRightVisibleLeafColumns=t("getRightVisibleLeafColumns",()=>e.getRightLeafColumns()),e.getCenterVisibleLeafColumns=t("getCenterVisibleLeafColumns",()=>e.getCenterLeafColumns()),e.setColumnVisibility=n=>e.options.onColumnVisibilityChange==null?void 0:e.options.onColumnVisibilityChange(n),e.resetColumnVisibility=n=>{var r;e.setColumnVisibility(n?{}:(r=e.initialState.columnVisibility)!=null?r:{})},e.toggleAllColumnsVisible=n=>{var r;n=(r=n)!=null?r:!e.getIsAllColumnsVisible(),e.setColumnVisibility(e.getAllLeafColumns().reduce((o,s)=>({...o,[s.id]:n||!(s.getCanHide!=null&&s.getCanHide())}),{}))},e.getIsAllColumnsVisible=()=>!e.getAllLeafColumns().some(n=>!(n.getIsVisible!=null&&n.getIsVisible())),e.getIsSomeColumnsVisible=()=>e.getAllLeafColumns().some(n=>n.getIsVisible==null?void 0:n.getIsVisible()),e.getToggleAllColumnsVisibilityHandler=()=>n=>{var r;e.toggleAllColumnsVisible((r=n.target)==null?void 0:r.checked)}}};function Vl(e,t){return t?t==="center"?e.getCenterVisibleLeafColumns():t==="left"?e.getLeftVisibleLeafColumns():e.getRightVisibleLeafColumns():e.getVisibleLeafColumns()}const oj={createTable:e=>{e._getGlobalFacetedRowModel=e.options.getFacetedRowModel&&e.options.getFacetedRowModel(e,"__global__"),e.getGlobalFacetedRowModel=()=>e.options.manualFiltering||!e._getGlobalFacetedRowModel?e.getPreFilteredRowModel():e._getGlobalFacetedRowModel(),e._getGlobalFacetedUniqueValues=e.options.getFacetedUniqueValues&&e.options.getFacetedUniqueValues(e,"__global__"),e.getGlobalFacetedUniqueValues=()=>e._getGlobalFacetedUniqueValues?e._getGlobalFacetedUniqueValues():new Map,e._getGlobalFacetedMinMaxValues=e.options.getFacetedMinMaxValues&&e.options.getFacetedMinMaxValues(e,"__global__"),e.getGlobalFacetedMinMaxValues=()=>{if(e._getGlobalFacetedMinMaxValues)return e._getGlobalFacetedMinMaxValues()}}},ij={getInitialState:e=>({globalFilter:void 0,...e}),getDefaultOptions:e=>({onGlobalFilterChange:wr("globalFilter",e),globalFilterFn:"auto",getColumnCanGlobalFilter:t=>{var n;const r=(n=e.getCoreRowModel().flatRows[0])==null||(n=n._getAllCellsByColumnId()[t.id])==null?void 0:n.getValue();return typeof r=="string"||typeof r=="number"}}),createColumn:(e,t)=>{e.getCanGlobalFilter=()=>{var n,r,o,s;return((n=e.columnDef.enableGlobalFilter)!=null?n:!0)&&((r=t.options.enableGlobalFilter)!=null?r:!0)&&((o=t.options.enableFilters)!=null?o:!0)&&((s=t.options.getColumnCanGlobalFilter==null?void 0:t.options.getColumnCanGlobalFilter(e))!=null?s:!0)&&!!e.accessorFn}},createTable:e=>{e.getGlobalAutoFilterFn=()=>co.includesString,e.getGlobalFilterFn=()=>{var t,n;const{globalFilterFn:r}=e.options;return of(r)?r:r==="auto"?e.getGlobalAutoFilterFn():(t=(n=e.options.filterFns)==null?void 0:n[r])!=null?t:co[r]},e.setGlobalFilter=t=>{e.options.onGlobalFilterChange==null||e.options.onGlobalFilterChange(t)},e.resetGlobalFilter=t=>{e.setGlobalFilter(t?void 0:e.initialState.globalFilter)}}},sj={getInitialState:e=>({expanded:{},...e}),getDefaultOptions:e=>({onExpandedChange:wr("expanded",e),paginateExpandedRows:!0}),createTable:e=>{let t=!1,n=!1;e._autoResetExpanded=()=>{var r,o;if(!t){e._queue(()=>{t=!0});return}if((r=(o=e.options.autoResetAll)!=null?o:e.options.autoResetExpanded)!=null?r:!e.options.manualExpanding){if(n)return;n=!0,e._queue(()=>{e.resetExpanded(),n=!1})}},e.setExpanded=r=>e.options.onExpandedChange==null?void 0:e.options.onExpandedChange(r),e.toggleAllRowsExpanded=r=>{r??!e.getIsAllRowsExpanded()?e.setExpanded(!0):e.setExpanded({})},e.resetExpanded=r=>{var o,s;e.setExpanded(r?{}:(o=(s=e.initialState)==null?void 0:s.expanded)!=null?o:{})},e.getCanSomeRowsExpand=()=>e.getPrePaginationRowModel().flatRows.some(r=>r.getCanExpand()),e.getToggleAllRowsExpandedHandler=()=>r=>{r.persist==null||r.persist(),e.toggleAllRowsExpanded()},e.getIsSomeRowsExpanded=()=>{const r=e.getState().expanded;return r===!0||Object.values(r).some(Boolean)},e.getIsAllRowsExpanded=()=>{const r=e.getState().expanded;return typeof r=="boolean"?r===!0:!(!Object.keys(r).length||e.getRowModel().flatRows.some(o=>!o.getIsExpanded()))},e.getExpandedDepth=()=>{let r=0;return(e.getState().expanded===!0?Object.keys(e.getRowModel().rowsById):Object.keys(e.getState().expanded)).forEach(s=>{const u=s.split(".");r=Math.max(r,u.length)}),r},e.getPreExpandedRowModel=()=>e.getSortedRowModel(),e.getExpandedRowModel=()=>(!e._getExpandedRowModel&&e.options.getExpandedRowModel&&(e._getExpandedRowModel=e.options.getExpandedRowModel(e)),e.options.manualExpanding||!e._getExpandedRowModel?e.getPreExpandedRowModel():e._getExpandedRowModel())},createRow:(e,t)=>{e.toggleExpanded=n=>{t.setExpanded(r=>{var o;const s=r===!0?!0:!!(r!=null&&r[e.id]);let u={};if(r===!0?Object.keys(t.getRowModel().rowsById).forEach(c=>{u[c]=!0}):u=r,n=(o=n)!=null?o:!s,!s&&n)return{...u,[e.id]:!0};if(s&&!n){const{[e.id]:c,...d}=u;return d}return r})},e.getIsExpanded=()=>{var n;const r=t.getState().expanded;return!!((n=t.options.getIsRowExpanded==null?void 0:t.options.getIsRowExpanded(e))!=null?n:r===!0||r?.[e.id])},e.getCanExpand=()=>{var n,r,o;return(n=t.options.getRowCanExpand==null?void 0:t.options.getRowCanExpand(e))!=null?n:((r=t.options.enableExpanding)!=null?r:!0)&&!!((o=e.subRows)!=null&&o.length)},e.getIsAllParentsExpanded=()=>{let n=!0,r=e;for(;n&&r.parentId;)r=t.getRow(r.parentId,!0),n=r.getIsExpanded();return n},e.getToggleExpandedHandler=()=>{const n=e.getCanExpand();return()=>{n&&e.toggleExpanded()}}}},cp=0,dp=10,fp=()=>({pageIndex:cp,pageSize:dp}),uj={getInitialState:e=>({...e,pagination:{...fp(),...e?.pagination}}),getDefaultOptions:e=>({onPaginationChange:wr("pagination",e)}),createTable:e=>{let t=!1,n=!1;e._autoResetPageIndex=()=>{var r,o;if(!t){e._queue(()=>{t=!0});return}if((r=(o=e.options.autoResetAll)!=null?o:e.options.autoResetPageIndex)!=null?r:!e.options.manualPagination){if(n)return;n=!0,e._queue(()=>{e.resetPageIndex(),n=!1})}},e.setPagination=r=>{const o=s=>Ko(r,s);return e.options.onPaginationChange==null?void 0:e.options.onPaginationChange(o)},e.resetPagination=r=>{var o;e.setPagination(r?fp():(o=e.initialState.pagination)!=null?o:fp())},e.setPageIndex=r=>{e.setPagination(o=>{let s=Ko(r,o.pageIndex);const u=typeof e.options.pageCount>"u"||e.options.pageCount===-1?Number.MAX_SAFE_INTEGER:e.options.pageCount-1;return s=Math.max(0,Math.min(s,u)),{...o,pageIndex:s}})},e.resetPageIndex=r=>{var o,s;e.setPageIndex(r?cp:(o=(s=e.initialState)==null||(s=s.pagination)==null?void 0:s.pageIndex)!=null?o:cp)},e.resetPageSize=r=>{var o,s;e.setPageSize(r?dp:(o=(s=e.initialState)==null||(s=s.pagination)==null?void 0:s.pageSize)!=null?o:dp)},e.setPageSize=r=>{e.setPagination(o=>{const s=Math.max(1,Ko(r,o.pageSize)),u=o.pageSize*o.pageIndex,c=Math.floor(u/s);return{...o,pageIndex:c,pageSize:s}})},e.setPageCount=r=>e.setPagination(o=>{var s;let u=Ko(r,(s=e.options.pageCount)!=null?s:-1);return typeof u=="number"&&(u=Math.max(-1,u)),{...o,pageCount:u}}),e.getPageOptions=ze(()=>[e.getPageCount()],r=>{let o=[];return r&&r>0&&(o=[...new Array(r)].fill(null).map((s,u)=>u)),o},Le(e.options,"debugTable")),e.getCanPreviousPage=()=>e.getState().pagination.pageIndex>0,e.getCanNextPage=()=>{const{pageIndex:r}=e.getState().pagination,o=e.getPageCount();return o===-1?!0:o===0?!1:re.setPageIndex(r=>r-1),e.nextPage=()=>e.setPageIndex(r=>r+1),e.firstPage=()=>e.setPageIndex(0),e.lastPage=()=>e.setPageIndex(e.getPageCount()-1),e.getPrePaginationRowModel=()=>e.getExpandedRowModel(),e.getPaginationRowModel=()=>(!e._getPaginationRowModel&&e.options.getPaginationRowModel&&(e._getPaginationRowModel=e.options.getPaginationRowModel(e)),e.options.manualPagination||!e._getPaginationRowModel?e.getPrePaginationRowModel():e._getPaginationRowModel()),e.getPageCount=()=>{var r;return(r=e.options.pageCount)!=null?r:Math.ceil(e.getRowCount()/e.getState().pagination.pageSize)},e.getRowCount=()=>{var r;return(r=e.options.rowCount)!=null?r:e.getPrePaginationRowModel().rows.length}}},hp=()=>({top:[],bottom:[]}),lj={getInitialState:e=>({rowPinning:hp(),...e}),getDefaultOptions:e=>({onRowPinningChange:wr("rowPinning",e)}),createRow:(e,t)=>{e.pin=(n,r,o)=>{const s=r?e.getLeafRows().map(d=>{let{id:p}=d;return p}):[],u=o?e.getParentRows().map(d=>{let{id:p}=d;return p}):[],c=new Set([...u,e.id,...s]);t.setRowPinning(d=>{var p,m;if(n==="bottom"){var g,y;return{top:((g=d?.top)!=null?g:[]).filter(b=>!(c!=null&&c.has(b))),bottom:[...((y=d?.bottom)!=null?y:[]).filter(b=>!(c!=null&&c.has(b))),...Array.from(c)]}}if(n==="top"){var A,w;return{top:[...((A=d?.top)!=null?A:[]).filter(b=>!(c!=null&&c.has(b))),...Array.from(c)],bottom:((w=d?.bottom)!=null?w:[]).filter(b=>!(c!=null&&c.has(b)))}}return{top:((p=d?.top)!=null?p:[]).filter(b=>!(c!=null&&c.has(b))),bottom:((m=d?.bottom)!=null?m:[]).filter(b=>!(c!=null&&c.has(b)))}})},e.getCanPin=()=>{var n;const{enableRowPinning:r,enablePinning:o}=t.options;return typeof r=="function"?r(e):(n=r??o)!=null?n:!0},e.getIsPinned=()=>{const n=[e.id],{top:r,bottom:o}=t.getState().rowPinning,s=n.some(c=>r?.includes(c)),u=n.some(c=>o?.includes(c));return s?"top":u?"bottom":!1},e.getPinnedIndex=()=>{var n,r;const o=e.getIsPinned();if(!o)return-1;const s=(n=o==="top"?t.getTopRows():t.getBottomRows())==null?void 0:n.map(u=>{let{id:c}=u;return c});return(r=s?.indexOf(e.id))!=null?r:-1}},createTable:e=>{e.setRowPinning=t=>e.options.onRowPinningChange==null?void 0:e.options.onRowPinningChange(t),e.resetRowPinning=t=>{var n,r;return e.setRowPinning(t?hp():(n=(r=e.initialState)==null?void 0:r.rowPinning)!=null?n:hp())},e.getIsSomeRowsPinned=t=>{var n;const r=e.getState().rowPinning;if(!t){var o,s;return!!((o=r.top)!=null&&o.length||(s=r.bottom)!=null&&s.length)}return!!((n=r[t])!=null&&n.length)},e._getPinnedRows=(t,n,r)=>{var o;return((o=e.options.keepPinnedRows)==null||o?(n??[]).map(u=>{const c=e.getRow(u,!0);return c.getIsAllParentsExpanded()?c:null}):(n??[]).map(u=>t.find(c=>c.id===u))).filter(Boolean).map(u=>({...u,position:r}))},e.getTopRows=ze(()=>[e.getRowModel().rows,e.getState().rowPinning.top],(t,n)=>e._getPinnedRows(t,n,"top"),Le(e.options,"debugRows")),e.getBottomRows=ze(()=>[e.getRowModel().rows,e.getState().rowPinning.bottom],(t,n)=>e._getPinnedRows(t,n,"bottom"),Le(e.options,"debugRows")),e.getCenterRows=ze(()=>[e.getRowModel().rows,e.getState().rowPinning.top,e.getState().rowPinning.bottom],(t,n,r)=>{const o=new Set([...n??[],...r??[]]);return t.filter(s=>!o.has(s.id))},Le(e.options,"debugRows"))}},cj={getInitialState:e=>({rowSelection:{},...e}),getDefaultOptions:e=>({onRowSelectionChange:wr("rowSelection",e),enableRowSelection:!0,enableMultiRowSelection:!0,enableSubRowSelection:!0}),createTable:e=>{e.setRowSelection=t=>e.options.onRowSelectionChange==null?void 0:e.options.onRowSelectionChange(t),e.resetRowSelection=t=>{var n;return e.setRowSelection(t?{}:(n=e.initialState.rowSelection)!=null?n:{})},e.toggleAllRowsSelected=t=>{e.setRowSelection(n=>{t=typeof t<"u"?t:!e.getIsAllRowsSelected();const r={...n},o=e.getPreGroupedRowModel().flatRows;return t?o.forEach(s=>{s.getCanSelect()&&(r[s.id]=!0)}):o.forEach(s=>{delete r[s.id]}),r})},e.toggleAllPageRowsSelected=t=>e.setRowSelection(n=>{const r=typeof t<"u"?t:!e.getIsAllPageRowsSelected(),o={...n};return e.getRowModel().rows.forEach(s=>{mp(o,s.id,r,!0,e)}),o}),e.getPreSelectedRowModel=()=>e.getCoreRowModel(),e.getSelectedRowModel=ze(()=>[e.getState().rowSelection,e.getCoreRowModel()],(t,n)=>Object.keys(t).length?pp(e,n):{rows:[],flatRows:[],rowsById:{}},Le(e.options,"debugTable")),e.getFilteredSelectedRowModel=ze(()=>[e.getState().rowSelection,e.getFilteredRowModel()],(t,n)=>Object.keys(t).length?pp(e,n):{rows:[],flatRows:[],rowsById:{}},Le(e.options,"debugTable")),e.getGroupedSelectedRowModel=ze(()=>[e.getState().rowSelection,e.getSortedRowModel()],(t,n)=>Object.keys(t).length?pp(e,n):{rows:[],flatRows:[],rowsById:{}},Le(e.options,"debugTable")),e.getIsAllRowsSelected=()=>{const t=e.getFilteredRowModel().flatRows,{rowSelection:n}=e.getState();let r=!!(t.length&&Object.keys(n).length);return r&&t.some(o=>o.getCanSelect()&&!n[o.id])&&(r=!1),r},e.getIsAllPageRowsSelected=()=>{const t=e.getPaginationRowModel().flatRows.filter(o=>o.getCanSelect()),{rowSelection:n}=e.getState();let r=!!t.length;return r&&t.some(o=>!n[o.id])&&(r=!1),r},e.getIsSomeRowsSelected=()=>{var t;const n=Object.keys((t=e.getState().rowSelection)!=null?t:{}).length;return n>0&&n{const t=e.getPaginationRowModel().flatRows;return e.getIsAllPageRowsSelected()?!1:t.filter(n=>n.getCanSelect()).some(n=>n.getIsSelected()||n.getIsSomeSelected())},e.getToggleAllRowsSelectedHandler=()=>t=>{e.toggleAllRowsSelected(t.target.checked)},e.getToggleAllPageRowsSelectedHandler=()=>t=>{e.toggleAllPageRowsSelected(t.target.checked)}},createRow:(e,t)=>{e.toggleSelected=(n,r)=>{const o=e.getIsSelected();t.setRowSelection(s=>{var u;if(n=typeof n<"u"?n:!o,e.getCanSelect()&&o===n)return s;const c={...s};return mp(c,e.id,n,(u=r?.selectChildren)!=null?u:!0,t),c})},e.getIsSelected=()=>{const{rowSelection:n}=t.getState();return gp(e,n)},e.getIsSomeSelected=()=>{const{rowSelection:n}=t.getState();return vp(e,n)==="some"},e.getIsAllSubRowsSelected=()=>{const{rowSelection:n}=t.getState();return vp(e,n)==="all"},e.getCanSelect=()=>{var n;return typeof t.options.enableRowSelection=="function"?t.options.enableRowSelection(e):(n=t.options.enableRowSelection)!=null?n:!0},e.getCanSelectSubRows=()=>{var n;return typeof t.options.enableSubRowSelection=="function"?t.options.enableSubRowSelection(e):(n=t.options.enableSubRowSelection)!=null?n:!0},e.getCanMultiSelect=()=>{var n;return typeof t.options.enableMultiRowSelection=="function"?t.options.enableMultiRowSelection(e):(n=t.options.enableMultiRowSelection)!=null?n:!0},e.getToggleSelectedHandler=()=>{const n=e.getCanSelect();return r=>{var o;n&&e.toggleSelected((o=r.target)==null?void 0:o.checked)}}}},mp=(e,t,n,r,o)=>{var s;const u=o.getRow(t,!0);n?(u.getCanMultiSelect()||Object.keys(e).forEach(c=>delete e[c]),u.getCanSelect()&&(e[t]=!0)):delete e[t],r&&(s=u.subRows)!=null&&s.length&&u.getCanSelectSubRows()&&u.subRows.forEach(c=>mp(e,c.id,n,r,o))};function pp(e,t){const n=e.getState().rowSelection,r=[],o={},s=function(u,c){return u.map(d=>{var p;const m=gp(d,n);if(m&&(r.push(d),o[d.id]=d),(p=d.subRows)!=null&&p.length&&(d={...d,subRows:s(d.subRows)}),m)return d}).filter(Boolean)};return{rows:s(t.rows),flatRows:r,rowsById:o}}function gp(e,t){var n;return(n=t[e.id])!=null?n:!1}function vp(e,t,n){var r;if(!((r=e.subRows)!=null&&r.length))return!1;let o=!0,s=!1;return e.subRows.forEach(u=>{if(!(s&&!o)&&(u.getCanSelect()&&(gp(u,t)?s=!0:o=!1),u.subRows&&u.subRows.length)){const c=vp(u,t);c==="all"?s=!0:(c==="some"&&(s=!0),o=!1)}}),o?"all":s?"some":!1}const Ap=/([0-9]+)/gm,dj=(e,t,n)=>yC(qo(e.getValue(n)).toLowerCase(),qo(t.getValue(n)).toLowerCase()),fj=(e,t,n)=>yC(qo(e.getValue(n)),qo(t.getValue(n))),hj=(e,t,n)=>yp(qo(e.getValue(n)).toLowerCase(),qo(t.getValue(n)).toLowerCase()),mj=(e,t,n)=>yp(qo(e.getValue(n)),qo(t.getValue(n))),pj=(e,t,n)=>{const r=e.getValue(n),o=t.getValue(n);return r>o?1:ryp(e.getValue(n),t.getValue(n));function yp(e,t){return e===t?0:e>t?1:-1}function qo(e){return typeof e=="number"?isNaN(e)||e===1/0||e===-1/0?"":String(e):typeof e=="string"?e:""}function yC(e,t){const n=e.split(Ap).filter(Boolean),r=t.split(Ap).filter(Boolean);for(;n.length&&r.length;){const o=n.shift(),s=r.shift(),u=parseInt(o,10),c=parseInt(s,10),d=[u,c].sort();if(isNaN(d[0])){if(o>s)return 1;if(s>o)return-1;continue}if(isNaN(d[1]))return isNaN(u)?-1:1;if(u>c)return 1;if(c>u)return-1}return n.length-r.length}const Hl={alphanumeric:dj,alphanumericCaseSensitive:fj,text:hj,textCaseSensitive:mj,datetime:pj,basic:gj},vj=[KT,aj,JT,ej,ZT,WT,oj,ij,{getInitialState:e=>({sorting:[],...e}),getDefaultColumnDef:()=>({sortingFn:"auto",sortUndefined:1}),getDefaultOptions:e=>({onSortingChange:wr("sorting",e),isMultiSortEvent:t=>t.shiftKey}),createColumn:(e,t)=>{e.getAutoSortingFn=()=>{const n=t.getFilteredRowModel().flatRows.slice(10);let r=!1;for(const o of n){const s=o?.getValue(e.id);if(Object.prototype.toString.call(s)==="[object Date]")return Hl.datetime;if(typeof s=="string"&&(r=!0,s.split(Ap).length>1))return Hl.alphanumeric}return r?Hl.text:Hl.basic},e.getAutoSortDir=()=>{const n=t.getFilteredRowModel().flatRows[0];return typeof n?.getValue(e.id)=="string"?"asc":"desc"},e.getSortingFn=()=>{var n,r;if(!e)throw new Error;return of(e.columnDef.sortingFn)?e.columnDef.sortingFn:e.columnDef.sortingFn==="auto"?e.getAutoSortingFn():(n=(r=t.options.sortingFns)==null?void 0:r[e.columnDef.sortingFn])!=null?n:Hl[e.columnDef.sortingFn]},e.toggleSorting=(n,r)=>{const o=e.getNextSortingOrder(),s=typeof n<"u"&&n!==null;t.setSorting(u=>{const c=u?.find(A=>A.id===e.id),d=u?.findIndex(A=>A.id===e.id);let p=[],m,g=s?n:o==="desc";if(u!=null&&u.length&&e.getCanMultiSort()&&r?c?m="toggle":m="add":u!=null&&u.length&&d!==u.length-1?m="replace":c?m="toggle":m="replace",m==="toggle"&&(s||o||(m="remove")),m==="add"){var y;p=[...u,{id:e.id,desc:g}],p.splice(0,p.length-((y=t.options.maxMultiSortColCount)!=null?y:Number.MAX_SAFE_INTEGER))}else m==="toggle"?p=u.map(A=>A.id===e.id?{...A,desc:g}:A):m==="remove"?p=u.filter(A=>A.id!==e.id):p=[{id:e.id,desc:g}];return p})},e.getFirstSortDir=()=>{var n,r;return((n=(r=e.columnDef.sortDescFirst)!=null?r:t.options.sortDescFirst)!=null?n:e.getAutoSortDir()==="desc")?"desc":"asc"},e.getNextSortingOrder=n=>{var r,o;const s=e.getFirstSortDir(),u=e.getIsSorted();return u?u!==s&&((r=t.options.enableSortingRemoval)==null||r)&&(!(n&&(o=t.options.enableMultiRemove)!=null)||o)?!1:u==="desc"?"asc":"desc":s},e.getCanSort=()=>{var n,r;return((n=e.columnDef.enableSorting)!=null?n:!0)&&((r=t.options.enableSorting)!=null?r:!0)&&!!e.accessorFn},e.getCanMultiSort=()=>{var n,r;return(n=(r=e.columnDef.enableMultiSort)!=null?r:t.options.enableMultiSort)!=null?n:!!e.accessorFn},e.getIsSorted=()=>{var n;const r=(n=t.getState().sorting)==null?void 0:n.find(o=>o.id===e.id);return r?r.desc?"desc":"asc":!1},e.getSortIndex=()=>{var n,r;return(n=(r=t.getState().sorting)==null?void 0:r.findIndex(o=>o.id===e.id))!=null?n:-1},e.clearSorting=()=>{t.setSorting(n=>n!=null&&n.length?n.filter(r=>r.id!==e.id):[])},e.getToggleSortingHandler=()=>{const n=e.getCanSort();return r=>{n&&(r.persist==null||r.persist(),e.toggleSorting==null||e.toggleSorting(void 0,e.getCanMultiSort()?t.options.isMultiSortEvent==null?void 0:t.options.isMultiSortEvent(r):!1))}}},createTable:e=>{e.setSorting=t=>e.options.onSortingChange==null?void 0:e.options.onSortingChange(t),e.resetSorting=t=>{var n,r;e.setSorting(t?[]:(n=(r=e.initialState)==null?void 0:r.sorting)!=null?n:[])},e.getPreSortedRowModel=()=>e.getGroupedRowModel(),e.getSortedRowModel=()=>(!e._getSortedRowModel&&e.options.getSortedRowModel&&(e._getSortedRowModel=e.options.getSortedRowModel(e)),e.options.manualSorting||!e._getSortedRowModel?e.getPreSortedRowModel():e._getSortedRowModel())}},XT,sj,uj,lj,cj,nj];function Aj(e){var t,n;const r=[...vj,...(t=e._features)!=null?t:[]];let o={_features:r};const s=o._features.reduce((y,A)=>Object.assign(y,A.getDefaultOptions==null?void 0:A.getDefaultOptions(o)),{}),u=y=>o.options.mergeOptions?o.options.mergeOptions(s,y):{...s,...y};let d={...{},...(n=e.initialState)!=null?n:{}};o._features.forEach(y=>{var A;d=(A=y.getInitialState==null?void 0:y.getInitialState(d))!=null?A:d});const p=[];let m=!1;const g={_features:r,options:{...s,...e},initialState:d,_queue:y=>{p.push(y),m||(m=!0,Promise.resolve().then(()=>{for(;p.length;)p.shift()();m=!1}).catch(A=>setTimeout(()=>{throw A})))},reset:()=>{o.setState(o.initialState)},setOptions:y=>{const A=Ko(y,o.options);o.options=u(A)},getState:()=>o.options.state,setState:y=>{o.options.onStateChange==null||o.options.onStateChange(y)},_getRowId:(y,A,w)=>{var b;return(b=o.options.getRowId==null?void 0:o.options.getRowId(y,A,w))!=null?b:`${w?[w.id,A].join("."):A}`},getCoreRowModel:()=>(o._getCoreRowModel||(o._getCoreRowModel=o.options.getCoreRowModel(o)),o._getCoreRowModel()),getRowModel:()=>o.getPaginationRowModel(),getRow:(y,A)=>{let w=(A?o.getPrePaginationRowModel():o.getRowModel()).rowsById[y];if(!w&&(w=o.getCoreRowModel().rowsById[y],!w))throw new Error;return w},_getDefaultColumnDef:ze(()=>[o.options.defaultColumn],y=>{var A;return y=(A=y)!=null?A:{},{header:w=>{const b=w.header.column.columnDef;return b.accessorKey?b.accessorKey:b.accessorFn?b.id:null},cell:w=>{var b,x;return(b=(x=w.renderValue())==null||x.toString==null?void 0:x.toString())!=null?b:null},...o._features.reduce((w,b)=>Object.assign(w,b.getDefaultColumnDef==null?void 0:b.getDefaultColumnDef()),{}),...y}},Le(e,"debugColumns")),_getColumnDefs:()=>o.options.columns,getAllColumns:ze(()=>[o._getColumnDefs()],y=>{const A=function(w,b,x){return x===void 0&&(x=0),w.map(E=>{const S=YT(o,E,x,b),F=E;return S.columns=F.columns?A(F.columns,S,x+1):[],S})};return A(y)},Le(e,"debugColumns")),getAllFlatColumns:ze(()=>[o.getAllColumns()],y=>y.flatMap(A=>A.getFlatColumns()),Le(e,"debugColumns")),_getAllFlatColumnsById:ze(()=>[o.getAllFlatColumns()],y=>y.reduce((A,w)=>(A[w.id]=w,A),{}),Le(e,"debugColumns")),getAllLeafColumns:ze(()=>[o.getAllColumns(),o._getOrderColumnsFn()],(y,A)=>{let w=y.flatMap(b=>b.getLeafColumns());return A(w)},Le(e,"debugColumns")),getColumn:y=>o._getAllFlatColumnsById()[y]};Object.assign(o,g);for(let y=0;yze(()=>[e.options.data],t=>{const n={rows:[],flatRows:[],rowsById:{}},r=function(o,s,u){s===void 0&&(s=0);const c=[];for(let p=0;pe._autoResetPageIndex()))}function bj(){return e=>ze(()=>[e.getState().sorting,e.getPreSortedRowModel()],(t,n)=>{if(!n.rows.length||!(t!=null&&t.length))return n;const r=e.getState().sorting,o=[],s=r.filter(d=>{var p;return(p=e.getColumn(d.id))==null?void 0:p.getCanSort()}),u={};s.forEach(d=>{const p=e.getColumn(d.id);p&&(u[d.id]={sortUndefined:p.columnDef.sortUndefined,invertSorting:p.columnDef.invertSorting,sortingFn:p.getSortingFn()})});const c=d=>{const p=d.map(m=>({...m}));return p.sort((m,g)=>{for(let A=0;A{var g;o.push(m),(g=m.subRows)!=null&&g.length&&(m.subRows=c(m.subRows))}),p};return{rows:c(n.rows),flatRows:o,rowsById:n.rowsById}},Le(e.options,"debugTable","getSortedRowModel",()=>e._autoResetPageIndex()))}function bC(e,t){return e?xj(e)?C.createElement(e,t):e:null}function xj(e){return _j(e)||typeof e=="function"||Cj(e)}function _j(e){return typeof e=="function"&&(()=>{const t=Object.getPrototypeOf(e);return t.prototype&&t.prototype.isReactComponent})()}function Cj(e){return typeof e=="object"&&typeof e.$$typeof=="symbol"&&["react.memo","react.forward_ref"].includes(e.$$typeof.description)}function wj(e){const t={state:{},onStateChange:()=>{},renderFallbackValue:null,...e},[n]=C.useState(()=>({current:Aj(t)})),[r,o]=C.useState(()=>n.current.initialState);return n.current.setOptions(s=>({...s,...e,state:{...r,...e.state},onStateChange:u=>{o(u),e.onStateChange==null||e.onStateChange(u)}})),n.current}var Js=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},Ej=class extends Js{#e;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<"u"&&window.addEventListener){const t=()=>e();return window.addEventListener("visibilitychange",t,!1),()=>{window.removeEventListener("visibilitychange",t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(t=>{typeof t=="boolean"?this.setFocused(t):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){const e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e=="boolean"?this.#e:globalThis.document?.visibilityState!=="hidden"}},bp=new Ej,Sj={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},Dj=class{#e=Sj;#t=!1;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}},Ki=new Dj;function Fj(e){setTimeout(e,0)}var Rj=typeof window>"u"||"Deno"in globalThis;function Xn(){}function Bj(e,t){return typeof e=="function"?e(t):e}function xp(e){return typeof e=="number"&&e>=0&&e!==1/0}function xC(e,t){return Math.max(e+(t||0)-Date.now(),0)}function Zo(e,t){return typeof e=="function"?e(t):e}function Er(e,t){return typeof e=="function"?e(t):e}function _C(e,t){const{type:n="all",exact:r,fetchStatus:o,predicate:s,queryKey:u,stale:c}=e;if(u){if(r){if(t.queryHash!==_p(u,t.options))return!1}else if(!Ql(t.queryKey,u))return!1}if(n!=="all"){const d=t.isActive();if(n==="active"&&!d||n==="inactive"&&d)return!1}return!(typeof c=="boolean"&&t.isStale()!==c||o&&o!==t.state.fetchStatus||s&&!s(t))}function CC(e,t){const{exact:n,status:r,predicate:o,mutationKey:s}=e;if(s){if(!t.options.mutationKey)return!1;if(n){if(qi(t.options.mutationKey)!==qi(s))return!1}else if(!Ql(t.options.mutationKey,s))return!1}return!(r&&t.state.status!==r||o&&!o(t))}function _p(e,t){return(t?.queryKeyHashFn||qi)(e)}function qi(e){return JSON.stringify(e,(t,n)=>Cp(n)?Object.keys(n).sort().reduce((r,o)=>(r[o]=n[o],r),{}):n)}function Ql(e,t){return e===t?!0:typeof e!=typeof t?!1:e&&t&&typeof e=="object"&&typeof t=="object"?Object.keys(t).every(n=>Ql(e[n],t[n])):!1}var kj=Object.prototype.hasOwnProperty;function wC(e,t,n=0){if(e===t)return e;if(n>500)return t;const r=EC(e)&&EC(t);if(!r&&!(Cp(e)&&Cp(t)))return t;const s=(r?e:Object.keys(e)).length,u=r?t:Object.keys(t),c=u.length,d=r?new Array(c):{};let p=0;for(let m=0;m{Ki.setTimeout(t,e)})}function wp(e,t,n){return typeof n.structuralSharing=="function"?n.structuralSharing(e,t):n.structuralSharing!==!1?wC(e,t):t}function Nj(e,t,n=0){const r=[...e,t];return n&&r.length>n?r.slice(1):r}function Tj(e,t,n=0){const r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var Ep=Symbol();function DC(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===Ep?()=>Promise.reject(new Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function Sp(e,t){return typeof e=="function"?e(...t):!!e}function jj(e,t,n){let r=!1,o;return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(o??=t(),r||(r=!0,o.aborted?n():o.addEventListener("abort",n,{once:!0})),o)}),e}var Gl=(()=>{let e=()=>Rj;return{isServer(){return e()},setIsServer(t){e=t}}})();function Dp(){let e,t;const n=new Promise((o,s)=>{e=o,t=s});n.status="pending",n.catch(()=>{});function r(o){Object.assign(n,o),delete n.resolve,delete n.reject}return n.resolve=o=>{r({status:"fulfilled",value:o}),e(o)},n.reject=o=>{r({status:"rejected",reason:o}),t(o)},n}var Pj=Fj;function zj(){let e=[],t=0,n=c=>{c()},r=c=>{c()},o=Pj;const s=c=>{t?e.push(c):o(()=>{n(c)})},u=()=>{const c=e;e=[],c.length&&o(()=>{r(()=>{c.forEach(d=>{n(d)})})})};return{batch:c=>{let d;t++;try{d=c()}finally{t--,t||u()}return d},batchCalls:c=>(...d)=>{s(()=>{c(...d)})},schedule:s,setNotifyFunction:c=>{n=c},setBatchNotifyFunction:c=>{r=c},setScheduler:c=>{o=c}}}var Cn=zj(),Lj=class extends Js{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<"u"&&window.addEventListener){const t=()=>e(!0),n=()=>e(!1);return window.addEventListener("online",t,!1),window.addEventListener("offline",n,!1),()=>{window.removeEventListener("online",t),window.removeEventListener("offline",n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(n=>{n(e)}))}isOnline(){return this.#e}},df=new Lj;function Oj(e){return Math.min(1e3*2**e,3e4)}function FC(e){return(e??"online")==="online"?df.isOnline():!0}var Fp=class extends Error{constructor(e){super("CancelledError"),this.revert=e?.revert,this.silent=e?.silent}};function RC(e){let t=!1,n=0,r;const o=Dp(),s=()=>o.status!=="pending",u=b=>{if(!s()){const x=new Fp(b);y(x),e.onCancel?.(x)}},c=()=>{t=!0},d=()=>{t=!1},p=()=>bp.isFocused()&&(e.networkMode==="always"||df.isOnline())&&e.canRun(),m=()=>FC(e.networkMode)&&e.canRun(),g=b=>{s()||(r?.(),o.resolve(b))},y=b=>{s()||(r?.(),o.reject(b))},A=()=>new Promise(b=>{r=x=>{(s()||p())&&b(x)},e.onPause?.()}).then(()=>{r=void 0,s()||e.onContinue?.()}),w=()=>{if(s())return;let b;const x=n===0?e.initialPromise:void 0;try{b=x??e.fn()}catch(E){b=Promise.reject(E)}Promise.resolve(b).then(g).catch(E=>{if(s())return;const S=e.retry??(Gl.isServer()?0:3),F=e.retryDelay??Oj,R=typeof F=="function"?F(n,E):F,k=S===!0||typeof S=="number"&&np()?void 0:A()).then(()=>{t?y(E):w()})})};return{promise:o,status:()=>o.status,cancel:u,continue:()=>(r?.(),o),cancelRetry:c,continueRetry:d,canStart:m,start:()=>(m()?w():A().then(w),o)}}var BC=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),xp(this.gcTime)&&(this.#e=Ki.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(Gl.isServer()?1/0:300*1e3))}clearGcTimeout(){this.#e!==void 0&&(Ki.clearTimeout(this.#e),this.#e=void 0)}};function Ij(e){return{onFetch:(t,n)=>{const r=t.options,o=t.fetchOptions?.meta?.fetchMore?.direction,s=t.state.data?.pages||[],u=t.state.data?.pageParams||[];let c={pages:[],pageParams:[]},d=0;const p=async()=>{let m=!1;const g=w=>{jj(w,()=>t.signal,()=>m=!0)},y=DC(t.options,t.fetchOptions),A=async(w,b,x)=>{if(m)return Promise.reject(t.signal.reason);if(b==null&&w.pages.length)return Promise.resolve(w);const S=(()=>{const B={client:t.client,queryKey:t.queryKey,pageParam:b,direction:x?"backward":"forward",meta:t.options.meta};return g(B),B})(),F=await y(S),{maxPages:R}=t.options,k=x?Tj:Nj;return{pages:k(w.pages,F,R),pageParams:k(w.pageParams,b,R)}};if(o&&s.length){const w=o==="backward",b=w?Uj:kC,x={pages:s,pageParams:u},E=b(r,x);c=await A(x,E,w)}else{const w=e??s.length;do{const b=d===0?u[0]??r.initialPageParam:kC(r,c);if(d>0&&b==null)break;c=await A(c,b),d++}while(dt.options.persister?.(p,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):t.fetchFn=p}}}function kC(e,{pages:t,pageParams:n}){const r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function Uj(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var Vj=class extends BC{#e;#t;#n;#r;#o;#a;#s;#i;constructor(e){super(),this.#i=!1,this.#s=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#o=e.client,this.#r=this.#o.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#t=TC(this.options),this.state=e.state??this.#t,this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return this.#e}get promise(){return this.#a?.promise}setOptions(e){if(this.options={...this.#s,...e},e?._type&&(this.#e=e._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){const t=TC(this.options);t.data!==void 0&&(this.setState(NC(t.data,t.dataUpdatedAt)),this.#t=t)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus==="idle"&&this.#r.remove(this)}setData(e,t){const n=wp(this.state.data,e,this.options);return this.#u({data:n,type:"success",dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e){this.#u({type:"setState",state:e})}cancel(e){const t=this.#a?.promise;return this.#a?.cancel(e),t?t.then(Xn).catch(Xn):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return this.#t}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>Er(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===Ep||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0?this.observers.some(e=>Zo(e.options.staleTime,this)==="static"):!1}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e==="static"?!1:this.state.isInvalidated?!0:!xC(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(t=>t.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#a?.continue()}onOnline(){this.observers.find(t=>t.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#a?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#r.notify({type:"observerAdded",query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#a&&(this.#i||this.#c()?this.#a.cancel({revert:!0}):this.#a.cancelRetry()),this.scheduleGc()),this.#r.notify({type:"observerRemoved",query:this,observer:e}))}getObserversCount(){return this.observers.length}#c(){return this.state.fetchStatus==="paused"&&this.state.status==="pending"}invalidate(){this.state.isInvalidated||this.#u({type:"invalidate"})}async fetch(e,t){if(this.state.fetchStatus!=="idle"&&this.#a?.status()!=="rejected"){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#a)return this.#a.continueRetry(),this.#a.promise}if(e&&this.setOptions(e),!this.options.queryFn){const d=this.observers.find(p=>p.options.queryFn);d&&this.setOptions(d.options)}const n=new AbortController,r=d=>{Object.defineProperty(d,"signal",{enumerable:!0,get:()=>(this.#i=!0,n.signal)})},o=()=>{const d=DC(this.options,t),m=(()=>{const g={client:this.#o,queryKey:this.queryKey,meta:this.meta};return r(g),g})();return this.#i=!1,this.options.persister?this.options.persister(d,m,this):d(m)},u=(()=>{const d={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#o,state:this.state,fetchFn:o};return r(d),d})();(this.#e==="infinite"?Ij(this.options.pages):this.options.behavior)?.onFetch(u,this),this.#n=this.state,(this.state.fetchStatus==="idle"||this.state.fetchMeta!==u.fetchOptions?.meta)&&this.#u({type:"fetch",meta:u.fetchOptions?.meta}),this.#a=RC({initialPromise:t?.initialPromise,fn:u.fetchFn,onCancel:d=>{d instanceof Fp&&d.revert&&this.setState({...this.#n,fetchStatus:"idle"}),n.abort()},onFail:(d,p)=>{this.#u({type:"failed",failureCount:d,error:p})},onPause:()=>{this.#u({type:"pause"})},onContinue:()=>{this.#u({type:"continue"})},retry:u.options.retry,retryDelay:u.options.retryDelay,networkMode:u.options.networkMode,canRun:()=>!0});try{const d=await this.#a.start();if(d===void 0)throw new Error(`${this.queryHash} data is undefined`);return this.setData(d),this.#r.config.onSuccess?.(d,this),this.#r.config.onSettled?.(d,this.state.error,this),d}catch(d){if(d instanceof Fp){if(d.silent)return this.#a.promise;if(d.revert){if(this.state.data===void 0)throw d;return this.state.data}}throw this.#u({type:"error",error:d}),this.#r.config.onError?.(d,this),this.#r.config.onSettled?.(this.state.data,d,this),d}finally{this.scheduleGc()}}#u(e){const t=n=>{switch(e.type){case"failed":return{...n,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case"pause":return{...n,fetchStatus:"paused"};case"continue":return{...n,fetchStatus:"fetching"};case"fetch":return{...n,...MC(n.data,this.options),fetchMeta:e.meta??null};case"success":const r={...n,...NC(e.data,e.dataUpdatedAt),dataUpdateCount:n.dataUpdateCount+1,...!e.manual&&{fetchStatus:"idle",fetchFailureCount:0,fetchFailureReason:null}};return this.#n=e.manual?r:void 0,r;case"error":const o=e.error;return{...n,error:o,errorUpdateCount:n.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:n.fetchFailureCount+1,fetchFailureReason:o,fetchStatus:"idle",status:"error",isInvalidated:!0};case"invalidate":return{...n,isInvalidated:!0};case"setState":return{...n,...e.state}}};this.state=t(this.state),Cn.batch(()=>{this.observers.forEach(n=>{n.onQueryUpdate()}),this.#r.notify({query:this,type:"updated",action:e})})}};function MC(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:FC(t.networkMode)?"fetching":"paused",...e===void 0&&{error:null,status:"pending"}}}function NC(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:"success"}}function TC(e){const t=typeof e.initialData=="function"?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt=="function"?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?"success":"pending",fetchStatus:"idle"}}var Hj=class extends Js{constructor(e,t){super(),this.options=t,this.#e=e,this.#i=null,this.#s=Dp(),this.bindMethods(),this.setOptions(t)}#e;#t=void 0;#n=void 0;#r=void 0;#o;#a;#s;#i;#c;#u;#m;#d;#f;#l;#p=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),jC(this.#t,this.options)?this.#h():this.updateResult(),this.#y())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return Rp(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return Rp(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#b(),this.#x(),this.#t.removeObserver(this)}setOptions(e){const t=this.options,n=this.#t;if(this.options=this.#e.defaultQueryOptions(e),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean"&&typeof this.options.enabled!="function"&&typeof Er(this.options.enabled,this.#t)!="boolean")throw new Error("Expected enabled to be a boolean or a callback that returns a boolean");this.#_(),this.#t.setOptions(this.options),t._defaulted&&!cf(this.options,t)&&this.#e.getQueryCache().notify({type:"observerOptionsUpdated",query:this.#t,observer:this});const r=this.hasListeners();r&&PC(this.#t,n,this.options,t)&&this.#h(),this.updateResult(),r&&(this.#t!==n||Er(this.options.enabled,this.#t)!==Er(t.enabled,this.#t)||Zo(this.options.staleTime,this.#t)!==Zo(t.staleTime,this.#t))&&this.#g();const o=this.#v();r&&(this.#t!==n||Er(this.options.enabled,this.#t)!==Er(t.enabled,this.#t)||o!==this.#l)&&this.#A(o)}getOptimisticResult(e){const t=this.#e.getQueryCache().build(this.#e,e),n=this.createResult(t,e);return Gj(this,n)&&(this.#r=n,this.#a=this.options,this.#o=this.#t.state),n}getCurrentResult(){return this.#r}trackResult(e,t){return new Proxy(e,{get:(n,r)=>(this.trackProp(r),t?.(r),r==="promise"&&(this.trackProp("data"),!this.options.experimental_prefetchInRender&&this.#s.status==="pending"&&this.#s.reject(new Error("experimental_prefetchInRender feature flag is not enabled"))),Reflect.get(n,r))})}trackProp(e){this.#p.add(e)}getCurrentQuery(){return this.#t}refetch({...e}={}){return this.fetch({...e})}fetchOptimistic(e){const t=this.#e.defaultQueryOptions(e),n=this.#e.getQueryCache().build(this.#e,t);return n.fetch().then(()=>this.createResult(n,t))}fetch(e){return this.#h({...e,cancelRefetch:e.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#r))}#h(e){this.#_();let t=this.#t.fetch(this.options,e);return e?.throwOnError||(t=t.catch(Xn)),t}#g(){this.#b();const e=Zo(this.options.staleTime,this.#t);if(Gl.isServer()||this.#r.isStale||!xp(e))return;const n=xC(this.#r.dataUpdatedAt,e)+1;this.#d=Ki.setTimeout(()=>{this.#r.isStale||this.updateResult()},n)}#v(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#A(e){this.#x(),this.#l=e,!(Gl.isServer()||Er(this.options.enabled,this.#t)===!1||!xp(this.#l)||this.#l===0)&&(this.#f=Ki.setInterval(()=>{(this.options.refetchIntervalInBackground||bp.isFocused())&&this.#h()},this.#l))}#y(){this.#g(),this.#A(this.#v())}#b(){this.#d!==void 0&&(Ki.clearTimeout(this.#d),this.#d=void 0)}#x(){this.#f!==void 0&&(Ki.clearInterval(this.#f),this.#f=void 0)}createResult(e,t){const n=this.#t,r=this.options,o=this.#r,s=this.#o,u=this.#a,d=e!==n?e.state:this.#n,{state:p}=e;let m={...p},g=!1,y;if(t._optimisticResults){const P=this.hasListeners(),U=!P&&jC(e,t),Q=P&&PC(e,n,t,r);(U||Q)&&(m={...m,...MC(p.data,e.options)}),t._optimisticResults==="isRestoring"&&(m.fetchStatus="idle")}let{error:A,errorUpdatedAt:w,status:b}=m;y=m.data;let x=!1;if(t.placeholderData!==void 0&&y===void 0&&b==="pending"){let P;o?.isPlaceholderData&&t.placeholderData===u?.placeholderData?(P=o.data,x=!0):P=typeof t.placeholderData=="function"?t.placeholderData(this.#m?.state.data,this.#m):t.placeholderData,P!==void 0&&(b="success",y=wp(o?.data,P,t),g=!0)}if(t.select&&y!==void 0&&!x)if(o&&y===s?.data&&t.select===this.#c)y=this.#u;else try{this.#c=t.select,y=t.select(y),y=wp(o?.data,y,t),this.#u=y,this.#i=null}catch(P){this.#i=P}this.#i&&(A=this.#i,y=this.#u,w=Date.now(),b="error");const E=m.fetchStatus==="fetching",S=b==="pending",F=b==="error",R=S&&E,k=y!==void 0,N={status:b,fetchStatus:m.fetchStatus,isPending:S,isSuccess:b==="success",isError:F,isInitialLoading:R,isLoading:R,data:y,dataUpdatedAt:m.dataUpdatedAt,error:A,errorUpdatedAt:w,failureCount:m.fetchFailureCount,failureReason:m.fetchFailureReason,errorUpdateCount:m.errorUpdateCount,isFetched:e.isFetched(),isFetchedAfterMount:m.dataUpdateCount>d.dataUpdateCount||m.errorUpdateCount>d.errorUpdateCount,isFetching:E,isRefetching:E&&!S,isLoadingError:F&&!k,isPaused:m.fetchStatus==="paused",isPlaceholderData:g,isRefetchError:F&&k,isStale:Bp(e,t),refetch:this.refetch,promise:this.#s,isEnabled:Er(t.enabled,e)!==!1};if(this.options.experimental_prefetchInRender){const P=N.data!==void 0,U=N.status==="error"&&!P,Q=V=>{U?V.reject(N.error):P&&V.resolve(N.data)},$=()=>{const V=this.#s=N.promise=Dp();Q(V)},q=this.#s;switch(q.status){case"pending":e.queryHash===n.queryHash&&Q(q);break;case"fulfilled":(U||N.data!==q.value)&&$();break;case"rejected":(!U||N.error!==q.reason)&&$();break}}return N}updateResult(){const e=this.#r,t=this.createResult(this.#t,this.options);if(this.#o=this.#t.state,this.#a=this.options,this.#o.data!==void 0&&(this.#m=this.#t),cf(t,e))return;this.#r=t;const n=()=>{if(!e)return!0;const{notifyOnChangeProps:r}=this.options,o=typeof r=="function"?r():r;if(o==="all"||!o&&!this.#p.size)return!0;const s=new Set(o??this.#p);return this.options.throwOnError&&s.add("error"),Object.keys(this.#r).some(u=>{const c=u;return this.#r[c]!==e[c]&&s.has(c)})};this.#C({listeners:n()})}#_(){const e=this.#e.getQueryCache().build(this.#e,this.options);if(e===this.#t)return;const t=this.#t;this.#t=e,this.#n=e.state,this.hasListeners()&&(t?.removeObserver(this),e.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#y()}#C(e){Cn.batch(()=>{e.listeners&&this.listeners.forEach(t=>{t(this.#r)}),this.#e.getQueryCache().notify({query:this.#t,type:"observerResultsUpdated"})})}};function Qj(e,t){return Er(t.enabled,e)!==!1&&e.state.data===void 0&&!(e.state.status==="error"&&Er(t.retryOnMount,e)===!1)}function jC(e,t){return Qj(e,t)||e.state.data!==void 0&&Rp(e,t,t.refetchOnMount)}function Rp(e,t,n){if(Er(t.enabled,e)!==!1&&Zo(t.staleTime,e)!=="static"){const r=typeof n=="function"?n(e):n;return r==="always"||r!==!1&&Bp(e,t)}return!1}function PC(e,t,n,r){return(e!==t||Er(r.enabled,e)===!1)&&(!n.suspense||e.state.status!=="error")&&Bp(e,n)}function Bp(e,t){return Er(t.enabled,e)!==!1&&e.isStaleByTime(Zo(t.staleTime,e))}function Gj(e,t){return!cf(e.getCurrentResult(),t)}var Yj=class extends BC{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||zC(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:"observerAdded",mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:"observerRemoved",mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status==="pending"?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){const t=()=>{this.#o({type:"continue"})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#r=RC({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(new Error("No mutationFn found")),onFail:(s,u)=>{this.#o({type:"failed",failureCount:s,error:u})},onPause:()=>{this.#o({type:"pause"})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});const r=this.state.status==="pending",o=!this.#r.canStart();try{if(r)t();else{this.#o({type:"pending",variables:e,isPaused:o}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);const u=await this.options.onMutate?.(e,n);u!==this.state.context&&this.#o({type:"pending",context:u,variables:e,isPaused:o})}const s=await this.#r.start();return await this.#n.config.onSuccess?.(s,e,this.state.context,this,n),await this.options.onSuccess?.(s,e,this.state.context,n),await this.#n.config.onSettled?.(s,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(s,null,e,this.state.context,n),this.#o({type:"success",data:s}),s}catch(s){try{await this.#n.config.onError?.(s,e,this.state.context,this,n)}catch(u){Promise.reject(u)}try{await this.options.onError?.(s,e,this.state.context,n)}catch(u){Promise.reject(u)}try{await this.#n.config.onSettled?.(void 0,s,this.state.variables,this.state.context,this,n)}catch(u){Promise.reject(u)}try{await this.options.onSettled?.(void 0,s,e,this.state.context,n)}catch(u){Promise.reject(u)}throw this.#o({type:"error",error:s}),s}finally{this.#n.runNext(this)}}#o(e){const t=n=>{switch(e.type){case"failed":return{...n,failureCount:e.failureCount,failureReason:e.error};case"pause":return{...n,isPaused:!0};case"continue":return{...n,isPaused:!1};case"pending":return{...n,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:"pending",variables:e.variables,submittedAt:Date.now()};case"success":return{...n,data:e.data,failureCount:0,failureReason:null,error:null,status:"success",isPaused:!1};case"error":return{...n,data:void 0,error:e.error,failureCount:n.failureCount+1,failureReason:e.error,isPaused:!1,status:"error"}}};this.state=t(this.state),Cn.batch(()=>{this.#t.forEach(n=>{n.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:"updated",action:e})})}};function zC(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:"idle",variables:void 0,submittedAt:0}}var LC=class extends Js{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){const r=new Yj({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);const t=ff(e);if(typeof t=="string"){const n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:"added",mutation:e})}remove(e){if(this.#e.delete(e)){const t=ff(e);if(typeof t=="string"){const n=this.#t.get(t);if(n)if(n.length>1){const r=n.indexOf(e);r!==-1&&n.splice(r,1)}else n[0]===e&&this.#t.delete(t)}}this.notify({type:"removed",mutation:e})}canRun(e){const t=ff(e);if(typeof t=="string"){const r=this.#t.get(t)?.find(o=>o.state.status==="pending");return!r||r===e}else return!0}runNext(e){const t=ff(e);return typeof t=="string"?this.#t.get(t)?.find(r=>r!==e&&r.state.isPaused)?.continue()??Promise.resolve():Promise.resolve()}clear(){Cn.batch(()=>{this.#e.forEach(e=>{this.notify({type:"removed",mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){const t={exact:!0,...e};return this.getAll().find(n=>CC(t,n))}findAll(e={}){return this.getAll().filter(t=>CC(e,t))}notify(e){Cn.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){const e=this.getAll().filter(t=>t.state.isPaused);return Cn.batch(()=>Promise.all(e.map(t=>t.continue().catch(Xn))))}};function ff(e){return e.options.scope?.id}var Kj=class extends Js{#e;#t=void 0;#n;#r;constructor(t,n){super(),this.#e=t,this.setOptions(n),this.bindMethods(),this.#o()}bindMethods(){this.mutate=this.mutate.bind(this),this.reset=this.reset.bind(this)}setOptions(t){const n=this.options;this.options=this.#e.defaultMutationOptions(t),cf(this.options,n)||this.#e.getMutationCache().notify({type:"observerOptionsUpdated",mutation:this.#n,observer:this}),n?.mutationKey&&this.options.mutationKey&&qi(n.mutationKey)!==qi(this.options.mutationKey)?this.reset():this.#n?.state.status==="pending"&&this.#n.setOptions(this.options)}onUnsubscribe(){this.hasListeners()||this.#n?.removeObserver(this)}onMutationUpdate(t){this.#o(),this.#a(t)}getCurrentResult(){return this.#t}reset(){this.#n?.removeObserver(this),this.#n=void 0,this.#o(),this.#a()}mutate(t,n){return this.#r=n,this.#n?.removeObserver(this),this.#n=this.#e.getMutationCache().build(this.#e,this.options),this.#n.addObserver(this),this.#n.execute(t)}#o(){const t=this.#n?.state??zC();this.#t={...t,isPending:t.status==="pending",isSuccess:t.status==="success",isError:t.status==="error",isIdle:t.status==="idle",mutate:this.mutate,reset:this.reset}}#a(t){Cn.batch(()=>{if(this.#r&&this.hasListeners()){const n=this.#t.variables,r=this.#t.context,o={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};if(t?.type==="success"){try{this.#r.onSuccess?.(t.data,n,r,o)}catch(s){Promise.reject(s)}try{this.#r.onSettled?.(t.data,null,n,r,o)}catch(s){Promise.reject(s)}}else if(t?.type==="error"){try{this.#r.onError?.(t.error,n,r,o)}catch(s){Promise.reject(s)}try{this.#r.onSettled?.(void 0,t.error,n,r,o)}catch(s){Promise.reject(s)}}}this.listeners.forEach(n=>{n(this.#t)})})}},OC=class extends Js{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){const r=t.queryKey,o=t.queryHash??_p(r,t);let s=this.get(o);return s||(s=new Vj({client:e,queryKey:r,queryHash:o,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(s)),s}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:"added",query:e}))}remove(e){const t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:"removed",query:e}))}clear(){Cn.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){const t={exact:!0,...e};return this.getAll().find(n=>_C(t,n))}findAll(e={}){const t=this.getAll();return Object.keys(e).length>0?t.filter(n=>_C(e,n)):t}notify(e){Cn.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){Cn.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){Cn.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},qj=class{#e;#t;#n;#r;#o;#a;#s;#i;constructor(e={}){this.#e=e.queryCache||new OC,this.#t=e.mutationCache||new LC,this.#n=e.defaultOptions||{},this.#r=new Map,this.#o=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#s=bp.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#i=df.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#s?.(),this.#s=void 0,this.#i?.(),this.#i=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:"fetching"}).length}isMutating(e){return this.#t.findAll({...e,status:"pending"}).length}getQueryData(e){const t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){const t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(Zo(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:t,state:n})=>{const r=n.data;return[t,r]})}setQueryData(e,t,n){const r=this.defaultQueryOptions({queryKey:e}),s=this.#e.get(r.queryHash)?.state.data,u=Bj(t,s);if(u!==void 0)return this.#e.build(this,r).setData(u,{...n,manual:!0})}setQueriesData(e,t,n){return Cn.batch(()=>this.#e.findAll(e).map(({queryKey:r})=>[r,this.setQueryData(r,t,n)]))}getQueryState(e){const t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){const t=this.#e;Cn.batch(()=>{t.findAll(e).forEach(n=>{t.remove(n)})})}resetQueries(e,t){const n=this.#e;return Cn.batch(()=>(n.findAll(e).forEach(r=>{r.reset()}),this.refetchQueries({type:"active",...e},t)))}cancelQueries(e,t={}){const n={revert:!0,...t},r=Cn.batch(()=>this.#e.findAll(e).map(o=>o.cancel(n)));return Promise.all(r).then(Xn).catch(Xn)}invalidateQueries(e,t={}){return Cn.batch(()=>(this.#e.findAll(e).forEach(n=>{n.invalidate()}),e?.refetchType==="none"?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??"active"},t)))}refetchQueries(e,t={}){const n={...t,cancelRefetch:t.cancelRefetch??!0},r=Cn.batch(()=>this.#e.findAll(e).filter(o=>!o.isDisabled()&&!o.isStatic()).map(o=>{let s=o.fetch(void 0,n);return n.throwOnError||(s=s.catch(Xn)),o.state.fetchStatus==="paused"?Promise.resolve():s}));return Promise.all(r).then(Xn)}fetchQuery(e){const t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);const n=this.#e.build(this,t);return n.isStaleByTime(Zo(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(Xn).catch(Xn)}fetchInfiniteQuery(e){return e._type="infinite",this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(Xn).catch(Xn)}ensureInfiniteQueryData(e){return e._type="infinite",this.ensureQueryData(e)}resumePausedMutations(){return df.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(qi(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){const t=[...this.#r.values()],n={};return t.forEach(r=>{Ql(e,r.queryKey)&&Object.assign(n,r.defaultOptions)}),n}setMutationDefaults(e,t){this.#o.set(qi(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){const t=[...this.#o.values()],n={};return t.forEach(r=>{Ql(e,r.mutationKey)&&Object.assign(n,r.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;const t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||(t.queryHash=_p(t.queryKey,t)),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!=="always"),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode="offlineFirst"),t.queryFn===Ep&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}},IC=C.createContext(void 0),Ua=e=>{const t=C.useContext(IC);if(!t)throw new Error("No QueryClient set, use QueryClientProvider to set one");return t},Zj=({client:e,children:t})=>(C.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),f.jsx(IC.Provider,{value:e,children:t})),UC=C.createContext(!1),Wj=()=>C.useContext(UC);UC.Provider;function Xj(){let e=!1;return{clearReset:()=>{e=!1},reset:()=>{e=!0},isReset:()=>e}}var $j=C.createContext(Xj()),Jj=()=>C.useContext($j),eP=(e,t,n)=>{const r=n?.state.error&&typeof e.throwOnError=="function"?Sp(e.throwOnError,[n.state.error,n]):e.throwOnError;(e.suspense||e.experimental_prefetchInRender||r)&&(t.isReset()||(e.retryOnMount=!1))},tP=e=>{C.useEffect(()=>{e.clearReset()},[e])},nP=({result:e,errorResetBoundary:t,throwOnError:n,query:r,suspense:o})=>e.isError&&!t.isReset()&&!e.isFetching&&r&&(o&&e.data===void 0||Sp(n,[e.error,r])),rP=e=>{if(e.suspense){const n=o=>o==="static"?o:Math.max(o??1e3,1e3),r=e.staleTime;e.staleTime=typeof r=="function"?(...o)=>n(r(...o)):n(r),typeof e.gcTime=="number"&&(e.gcTime=Math.max(e.gcTime,1e3))}},aP=(e,t)=>e.isLoading&&e.isFetching&&!t,oP=(e,t)=>e?.suspense&&t.isPending,VC=(e,t,n)=>t.fetchOptimistic(e).catch(()=>{n.clearReset()});function iP(e,t,n){const r=Wj(),o=Jj(),s=Ua(),u=s.defaultQueryOptions(e);s.getDefaultOptions().queries?._experimental_beforeQuery?.(u);const c=s.getQueryCache().get(u.queryHash),d=e.subscribed!==!1;u._optimisticResults=r?"isRestoring":d?"optimistic":void 0,rP(u),eP(u,o,c),tP(o);const p=!s.getQueryCache().get(u.queryHash),[m]=C.useState(()=>new t(s,u)),g=m.getOptimisticResult(u),y=!r&&d;if(C.useSyncExternalStore(C.useCallback(A=>{const w=y?m.subscribe(Cn.batchCalls(A)):Xn;return m.updateResult(),w},[m,y]),()=>m.getCurrentResult(),()=>m.getCurrentResult()),C.useEffect(()=>{m.setOptions(u)},[u,m]),oP(u,g))throw VC(u,m,o);if(nP({result:g,errorResetBoundary:o,throwOnError:u.throwOnError,query:c,suspense:u.suspense}))throw g.error;return s.getDefaultOptions().queries?._experimental_afterQuery?.(u,g),u.experimental_prefetchInRender&&!Gl.isServer()&&aP(g,r)&&(p?VC(u,m,o):c?.promise)?.catch(Xn).finally(()=>{m.updateResult()}),u.notifyOnChangeProps?g:m.trackResult(g)}function ya(e,t){return iP(e,Hj)}function Kt(e,t){const n=Ua(),[r]=C.useState(()=>new Kj(n,e));C.useEffect(()=>{r.setOptions(e)},[r,e]);const o=C.useSyncExternalStore(C.useCallback(u=>r.subscribe(Cn.batchCalls(u)),[r]),()=>r.getCurrentResult(),()=>r.getCurrentResult()),s=C.useCallback((u,c)=>{r.mutate(u,c).catch(Xn)},[r]);if(o.error&&Sp(r.options.throwOnError,[o.error]))throw o.error;return{...o,mutate:s,mutateAsync:o.mutate}}var hf="Checkbox",[sP]=Vn(hf),[uP,kp]=sP(hf);function lP(e){const{__scopeCheckbox:t,checked:n,children:r,defaultChecked:o,disabled:s,form:u,name:c,onCheckedChange:d,required:p,value:m="on",internal_do_not_use_render:g}=e,[y,A]=ir({prop:n,defaultProp:o??!1,onChange:d,caller:hf}),[w,b]=C.useState(null),[x,E]=C.useState(null),S=C.useRef(!1),F=w?!!u||!!w.closest("form"):!0,R={checked:y,disabled:s,setChecked:A,control:w,setControl:b,name:c,form:u,value:m,hasConsumerStoppedPropagationRef:S,required:p,defaultChecked:Wo(o)?!1:o,isFormControl:F,bubbleInput:x,setBubbleInput:E};return f.jsx(uP,{scope:t,...R,children:cP(g)?g(R):r})}var HC="CheckboxTrigger",QC=C.forwardRef(({__scopeCheckbox:e,onKeyDown:t,onClick:n,...r},o)=>{const{control:s,value:u,disabled:c,checked:d,required:p,setControl:m,setChecked:g,hasConsumerStoppedPropagationRef:y,isFormControl:A,bubbleInput:w}=kp(HC,e),b=nt(o,m),x=C.useRef(d);return C.useEffect(()=>{const E=s?.form;if(E){const S=()=>g(x.current);return E.addEventListener("reset",S),()=>E.removeEventListener("reset",S)}},[s,g]),f.jsx(Te.button,{type:"button",role:"checkbox","aria-checked":Wo(d)?"mixed":d,"aria-required":p,"data-state":WC(d),"data-disabled":c?"":void 0,disabled:c,value:u,...r,ref:b,onKeyDown:_e(t,E=>{E.key==="Enter"&&E.preventDefault()}),onClick:_e(n,E=>{g(S=>Wo(S)?!0:!S),w&&A&&(y.current=E.isPropagationStopped(),y.current||E.stopPropagation())})})});QC.displayName=HC;var GC=C.forwardRef((e,t)=>{const{__scopeCheckbox:n,name:r,checked:o,defaultChecked:s,required:u,disabled:c,value:d,onCheckedChange:p,form:m,...g}=e;return f.jsx(lP,{__scopeCheckbox:n,checked:o,defaultChecked:s,disabled:c,required:u,onCheckedChange:p,name:r,form:m,value:d,internal_do_not_use_render:({isFormControl:y})=>f.jsxs(f.Fragment,{children:[f.jsx(QC,{...g,ref:t,__scopeCheckbox:n}),y&&f.jsx(ZC,{__scopeCheckbox:n})]})})});GC.displayName=hf;var YC="CheckboxIndicator",KC=C.forwardRef((e,t)=>{const{__scopeCheckbox:n,forceMount:r,...o}=e,s=kp(YC,n);return f.jsx(Hn,{present:r||Wo(s.checked)||s.checked===!0,children:f.jsx(Te.span,{"data-state":WC(s.checked),"data-disabled":s.disabled?"":void 0,...o,ref:t,style:{pointerEvents:"none",...e.style}})})});KC.displayName=YC;var qC="CheckboxBubbleInput",ZC=C.forwardRef(({__scopeCheckbox:e,...t},n)=>{const{control:r,hasConsumerStoppedPropagationRef:o,checked:s,defaultChecked:u,required:c,disabled:d,name:p,value:m,form:g,bubbleInput:y,setBubbleInput:A}=kp(qC,e),w=nt(n,A),b=rf(s),x=Qd(r);C.useEffect(()=>{const S=y;if(!S)return;const F=window.HTMLInputElement.prototype,k=Object.getOwnPropertyDescriptor(F,"checked").set,B=!o.current;if(b!==s&&k){const N=new Event("click",{bubbles:B});S.indeterminate=Wo(s),k.call(S,Wo(s)?!1:s),S.dispatchEvent(N)}},[y,b,s,o]);const E=C.useRef(Wo(s)?!1:s);return f.jsx(Te.input,{type:"checkbox","aria-hidden":!0,defaultChecked:u??E.current,required:c,disabled:d,name:p,value:m,form:g,...t,tabIndex:-1,ref:w,style:{...t.style,...x,position:"absolute",pointerEvents:"none",opacity:0,margin:0,transform:"translateX(-100%)"}})});ZC.displayName=qC;function cP(e){return typeof e=="function"}function Wo(e){return e==="indeterminate"}function WC(e){return Wo(e)?"indeterminate":e?"checked":"unchecked"}function mf(e){const t=e+"CollectionProvider",[n,r]=Vn(t),[o,s]=n(t,{collectionRef:{current:null},itemMap:new Map}),u=b=>{const{scope:x,children:E}=b,S=Y.useRef(null),F=Y.useRef(new Map).current;return f.jsx(o,{scope:x,itemMap:F,collectionRef:S,children:E})};u.displayName=t;const c=e+"CollectionSlot",d=Ui(c),p=Y.forwardRef((b,x)=>{const{scope:E,children:S}=b,F=s(c,E),R=nt(x,F.collectionRef);return f.jsx(d,{ref:R,children:S})});p.displayName=c;const m=e+"CollectionItemSlot",g="data-radix-collection-item",y=Ui(m),A=Y.forwardRef((b,x)=>{const{scope:E,children:S,...F}=b,R=Y.useRef(null),k=nt(x,R),B=s(m,E);return Y.useEffect(()=>(B.itemMap.set(R,{ref:R,...F}),()=>{B.itemMap.delete(R)})),f.jsx(y,{[g]:"",ref:k,children:S})});A.displayName=m;function w(b){const x=s(e+"CollectionConsumer",b);return Y.useCallback(()=>{const S=x.collectionRef.current;if(!S)return[];const F=Array.from(S.querySelectorAll(`[${g}]`));return Array.from(x.itemMap.values()).sort((B,N)=>F.indexOf(B.ref.current)-F.indexOf(N.ref.current))},[x.collectionRef,x.itemMap])}return[{Provider:u,Slot:p,ItemSlot:A},w,r]}var dP=C.createContext(void 0);function eu(e){const t=C.useContext(dP);return e||t||"ltr"}var Mp="rovingFocusGroup.onEntryFocus",fP={bubbles:!1,cancelable:!0},Yl="RovingFocusGroup",[Np,XC,hP]=mf(Yl),[mP,tu]=Vn(Yl,[hP]),[pP,gP]=mP(Yl),$C=C.forwardRef((e,t)=>f.jsx(Np.Provider,{scope:e.__scopeRovingFocusGroup,children:f.jsx(Np.Slot,{scope:e.__scopeRovingFocusGroup,children:f.jsx(vP,{...e,ref:t})})}));$C.displayName=Yl;var vP=C.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,orientation:r,loop:o=!1,dir:s,currentTabStopId:u,defaultCurrentTabStopId:c,onCurrentTabStopIdChange:d,onEntryFocus:p,preventScrollOnEntryFocus:m=!1,...g}=e,y=C.useRef(null),A=nt(t,y),w=eu(s),[b,x]=ir({prop:u,defaultProp:c??null,onChange:d,caller:Yl}),[E,S]=C.useState(!1),F=Pa(p),R=XC(n),k=C.useRef(!1),[B,N]=C.useState(0);return C.useEffect(()=>{const P=y.current;if(P)return P.addEventListener(Mp,F),()=>P.removeEventListener(Mp,F)},[F]),f.jsx(pP,{scope:n,orientation:r,dir:w,loop:o,currentTabStopId:b,onItemFocus:C.useCallback(P=>x(P),[x]),onItemShiftTab:C.useCallback(()=>S(!0),[]),onFocusableItemAdd:C.useCallback(()=>N(P=>P+1),[]),onFocusableItemRemove:C.useCallback(()=>N(P=>P-1),[]),children:f.jsx(Te.div,{tabIndex:E||B===0?-1:0,"data-orientation":r,...g,ref:A,style:{outline:"none",...e.style},onMouseDown:_e(e.onMouseDown,()=>{k.current=!0}),onFocus:_e(e.onFocus,P=>{const U=!k.current;if(P.target===P.currentTarget&&U&&!E){const Q=new CustomEvent(Mp,fP);if(P.currentTarget.dispatchEvent(Q),!Q.defaultPrevented){const $=R().filter(j=>j.focusable),q=$.find(j=>j.active),V=$.find(j=>j.id===b),ae=[q,V,...$].filter(Boolean).map(j=>j.ref.current);tw(ae,m)}}k.current=!1}),onBlur:_e(e.onBlur,()=>S(!1))})})}),JC="RovingFocusGroupItem",ew=C.forwardRef((e,t)=>{const{__scopeRovingFocusGroup:n,focusable:r=!0,active:o=!1,tabStopId:s,children:u,...c}=e,d=or(),p=s||d,m=gP(JC,n),g=m.currentTabStopId===p,y=XC(n),{onFocusableItemAdd:A,onFocusableItemRemove:w,currentTabStopId:b}=m;return C.useEffect(()=>{if(r)return A(),()=>w()},[r,A,w]),f.jsx(Np.ItemSlot,{scope:n,id:p,focusable:r,active:o,children:f.jsx(Te.span,{tabIndex:g?0:-1,"data-orientation":m.orientation,...c,ref:t,onMouseDown:_e(e.onMouseDown,x=>{r?m.onItemFocus(p):x.preventDefault()}),onFocus:_e(e.onFocus,()=>m.onItemFocus(p)),onKeyDown:_e(e.onKeyDown,x=>{if(x.key==="Tab"&&x.shiftKey){m.onItemShiftTab();return}if(x.target!==x.currentTarget)return;const E=bP(x,m.orientation,m.dir);if(E!==void 0){if(x.metaKey||x.ctrlKey||x.altKey||x.shiftKey)return;x.preventDefault();let F=y().filter(R=>R.focusable).map(R=>R.ref.current);if(E==="last")F.reverse();else if(E==="prev"||E==="next"){E==="prev"&&F.reverse();const R=F.indexOf(x.currentTarget);F=m.loop?xP(F,R+1):F.slice(R+1)}setTimeout(()=>tw(F))}}),children:typeof u=="function"?u({isCurrentTabStop:g,hasTabStop:b!=null}):u})})});ew.displayName=JC;var AP={ArrowLeft:"prev",ArrowUp:"prev",ArrowRight:"next",ArrowDown:"next",PageUp:"first",Home:"first",PageDown:"last",End:"last"};function yP(e,t){return t!=="rtl"?e:e==="ArrowLeft"?"ArrowRight":e==="ArrowRight"?"ArrowLeft":e}function bP(e,t,n){const r=yP(e.key,n);if(!(t==="vertical"&&["ArrowLeft","ArrowRight"].includes(r))&&!(t==="horizontal"&&["ArrowUp","ArrowDown"].includes(r)))return AP[r]}function tw(e,t=!1){const n=document.activeElement;for(const r of e)if(r===n||(r.focus({preventScroll:t}),document.activeElement!==n))return}function xP(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var Tp=$C,jp=ew,Pp="Radio",[_P,nw]=Vn(Pp),[CP,wP]=_P(Pp),rw=C.forwardRef((e,t)=>{const{__scopeRadio:n,name:r,checked:o=!1,required:s,disabled:u,value:c="on",onCheck:d,form:p,...m}=e,[g,y]=C.useState(null),A=nt(t,x=>y(x)),w=C.useRef(!1),b=g?p||!!g.closest("form"):!0;return f.jsxs(CP,{scope:n,checked:o,disabled:u,children:[f.jsx(Te.button,{type:"button",role:"radio","aria-checked":o,"data-state":sw(o),"data-disabled":u?"":void 0,disabled:u,value:c,...m,ref:A,onClick:_e(e.onClick,x=>{o||d?.(),b&&(w.current=x.isPropagationStopped(),w.current||x.stopPropagation())})}),b&&f.jsx(iw,{control:g,bubbles:!w.current,name:r,value:c,checked:o,required:s,disabled:u,form:p,style:{transform:"translateX(-100%)"}})]})});rw.displayName=Pp;var aw="RadioIndicator",ow=C.forwardRef((e,t)=>{const{__scopeRadio:n,forceMount:r,...o}=e,s=wP(aw,n);return f.jsx(Hn,{present:r||s.checked,children:f.jsx(Te.span,{"data-state":sw(s.checked),"data-disabled":s.disabled?"":void 0,...o,ref:t})})});ow.displayName=aw;var EP="RadioBubbleInput",iw=C.forwardRef(({__scopeRadio:e,control:t,checked:n,bubbles:r=!0,...o},s)=>{const u=C.useRef(null),c=nt(u,s),d=rf(n),p=Qd(t);return C.useEffect(()=>{const m=u.current;if(!m)return;const g=window.HTMLInputElement.prototype,A=Object.getOwnPropertyDescriptor(g,"checked").set;if(d!==n&&A){const w=new Event("click",{bubbles:r});A.call(m,n),m.dispatchEvent(w)}},[d,n,r]),f.jsx(Te.input,{type:"radio","aria-hidden":!0,defaultChecked:n,...o,tabIndex:-1,ref:c,style:{...o.style,...p,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});iw.displayName=EP;function sw(e){return e?"checked":"unchecked"}var SP=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],pf="RadioGroup",[DP]=Vn(pf,[tu,nw]),uw=tu(),lw=nw(),[FP,RP]=DP(pf),cw=C.forwardRef((e,t)=>{const{__scopeRadioGroup:n,name:r,defaultValue:o,value:s,required:u=!1,disabled:c=!1,orientation:d,dir:p,loop:m=!0,onValueChange:g,...y}=e,A=uw(n),w=eu(p),[b,x]=ir({prop:s,defaultProp:o??null,onChange:g,caller:pf});return f.jsx(FP,{scope:n,name:r,required:u,disabled:c,value:b,onValueChange:x,children:f.jsx(Tp,{asChild:!0,...A,orientation:d,dir:w,loop:m,children:f.jsx(Te.div,{role:"radiogroup","aria-required":u,"aria-orientation":d,"data-disabled":c?"":void 0,dir:w,...y,ref:t})})})});cw.displayName=pf;var dw="RadioGroupItem",fw=C.forwardRef((e,t)=>{const{__scopeRadioGroup:n,disabled:r,...o}=e,s=RP(dw,n),u=s.disabled||r,c=uw(n),d=lw(n),p=C.useRef(null),m=nt(t,p),g=s.value===o.value,y=C.useRef(!1);return C.useEffect(()=>{const A=b=>{SP.includes(b.key)&&(y.current=!0)},w=()=>y.current=!1;return document.addEventListener("keydown",A),document.addEventListener("keyup",w),()=>{document.removeEventListener("keydown",A),document.removeEventListener("keyup",w)}},[]),f.jsx(jp,{asChild:!0,...c,focusable:!u,active:g,children:f.jsx(rw,{disabled:u,required:s.required,checked:g,...d,...o,name:s.name,ref:m,onCheck:()=>s.onValueChange(o.value),onKeyDown:_e(A=>{A.key==="Enter"&&A.preventDefault()}),onFocus:_e(o.onFocus,()=>{y.current&&p.current?.click()})})})});fw.displayName=dw;var BP="RadioGroupIndicator",hw=C.forwardRef((e,t)=>{const{__scopeRadioGroup:n,...r}=e,o=lw(n);return f.jsx(ow,{...o,...r,ref:t})});hw.displayName=BP;var kP=fw,MP=hw,gf="Collapsible",[NP,mw]=Vn(gf),[TP,zp]=NP(gf),pw=C.forwardRef((e,t)=>{const{__scopeCollapsible:n,open:r,defaultOpen:o,disabled:s,onOpenChange:u,...c}=e,[d,p]=ir({prop:r,defaultProp:o??!1,onChange:u,caller:gf});return f.jsx(TP,{scope:n,disabled:s,contentId:or(),open:d,onOpenToggle:C.useCallback(()=>p(m=>!m),[p]),children:f.jsx(Te.div,{"data-state":Op(d),"data-disabled":s?"":void 0,...c,ref:t})})});pw.displayName=gf;var gw="CollapsibleTrigger",vw=C.forwardRef((e,t)=>{const{__scopeCollapsible:n,...r}=e,o=zp(gw,n);return f.jsx(Te.button,{type:"button","aria-controls":o.contentId,"aria-expanded":o.open||!1,"data-state":Op(o.open),"data-disabled":o.disabled?"":void 0,disabled:o.disabled,...r,ref:t,onClick:_e(e.onClick,o.onOpenToggle)})});vw.displayName=gw;var Lp="CollapsibleContent",Aw=C.forwardRef((e,t)=>{const{forceMount:n,...r}=e,o=zp(Lp,e.__scopeCollapsible);return f.jsx(Hn,{present:n||o.open,children:({present:s})=>f.jsx(jP,{...r,ref:t,present:s})})});Aw.displayName=Lp;var jP=C.forwardRef((e,t)=>{const{__scopeCollapsible:n,present:r,children:o,...s}=e,u=zp(Lp,n),[c,d]=C.useState(r),p=C.useRef(null),m=nt(t,p),g=C.useRef(0),y=g.current,A=C.useRef(0),w=A.current,b=u.open||c,x=C.useRef(b),E=C.useRef(void 0);return C.useEffect(()=>{const S=requestAnimationFrame(()=>x.current=!1);return()=>cancelAnimationFrame(S)},[]),Bn(()=>{const S=p.current;if(S){E.current=E.current||{transitionDuration:S.style.transitionDuration,animationName:S.style.animationName},S.style.transitionDuration="0s",S.style.animationName="none";const F=S.getBoundingClientRect();g.current=F.height,A.current=F.width,x.current||(S.style.transitionDuration=E.current.transitionDuration,S.style.animationName=E.current.animationName),d(r)}},[u.open,r]),f.jsx(Te.div,{"data-state":Op(u.open),"data-disabled":u.disabled?"":void 0,id:u.contentId,hidden:!b,...s,ref:m,style:{"--radix-collapsible-content-height":y?`${y}px`:void 0,"--radix-collapsible-content-width":w?`${w}px`:void 0,...e.style},children:b&&o})});function Op(e){return e?"open":"closed"}var PP=pw,zP=vw,LP=Aw,ba="Accordion",OP=["Home","End","ArrowDown","ArrowUp","ArrowLeft","ArrowRight"],[Ip,IP,UP]=mf(ba),[vf]=Vn(ba,[UP,mw]),Up=mw(),yw=Y.forwardRef((e,t)=>{const{type:n,...r}=e,o=r,s=r;return f.jsx(Ip.Provider,{scope:e.__scopeAccordion,children:n==="multiple"?f.jsx(GP,{...s,ref:t}):f.jsx(QP,{...o,ref:t})})});yw.displayName=ba;var[bw,VP]=vf(ba),[xw,HP]=vf(ba,{collapsible:!1}),QP=Y.forwardRef((e,t)=>{const{value:n,defaultValue:r,onValueChange:o=()=>{},collapsible:s=!1,...u}=e,[c,d]=ir({prop:n,defaultProp:r??"",onChange:o,caller:ba});return f.jsx(bw,{scope:e.__scopeAccordion,value:Y.useMemo(()=>c?[c]:[],[c]),onItemOpen:d,onItemClose:Y.useCallback(()=>s&&d(""),[s,d]),children:f.jsx(xw,{scope:e.__scopeAccordion,collapsible:s,children:f.jsx(_w,{...u,ref:t})})})}),GP=Y.forwardRef((e,t)=>{const{value:n,defaultValue:r,onValueChange:o=()=>{},...s}=e,[u,c]=ir({prop:n,defaultProp:r??[],onChange:o,caller:ba}),d=Y.useCallback(m=>c((g=[])=>[...g,m]),[c]),p=Y.useCallback(m=>c((g=[])=>g.filter(y=>y!==m)),[c]);return f.jsx(bw,{scope:e.__scopeAccordion,value:u,onItemOpen:d,onItemClose:p,children:f.jsx(xw,{scope:e.__scopeAccordion,collapsible:!0,children:f.jsx(_w,{...s,ref:t})})})}),[YP,Af]=vf(ba),_w=Y.forwardRef((e,t)=>{const{__scopeAccordion:n,disabled:r,dir:o,orientation:s="vertical",...u}=e,c=Y.useRef(null),d=nt(c,t),p=IP(n),g=eu(o)==="ltr",y=_e(e.onKeyDown,A=>{if(!OP.includes(A.key))return;const w=A.target,b=p().filter(P=>!P.ref.current?.disabled),x=b.findIndex(P=>P.ref.current===w),E=b.length;if(x===-1)return;A.preventDefault();let S=x;const F=0,R=E-1,k=()=>{S=x+1,S>R&&(S=F)},B=()=>{S=x-1,S{const{__scopeAccordion:n,value:r,...o}=e,s=Af(yf,n),u=VP(yf,n),c=Up(n),d=or(),p=r&&u.value.includes(r)||!1,m=s.disabled||e.disabled;return f.jsx(KP,{scope:n,open:p,disabled:m,triggerId:d,children:f.jsx(PP,{"data-orientation":s.orientation,"data-state":Rw(p),...c,...o,ref:t,disabled:m,open:p,onOpenChange:g=>{g?u.onItemOpen(r):u.onItemClose(r)}})})});Cw.displayName=yf;var ww="AccordionHeader",Ew=Y.forwardRef((e,t)=>{const{__scopeAccordion:n,...r}=e,o=Af(ba,n),s=Vp(ww,n);return f.jsx(Te.h3,{"data-orientation":o.orientation,"data-state":Rw(s.open),"data-disabled":s.disabled?"":void 0,...r,ref:t})});Ew.displayName=ww;var Hp="AccordionTrigger",Sw=Y.forwardRef((e,t)=>{const{__scopeAccordion:n,...r}=e,o=Af(ba,n),s=Vp(Hp,n),u=HP(Hp,n),c=Up(n);return f.jsx(Ip.ItemSlot,{scope:n,children:f.jsx(zP,{"aria-disabled":s.open&&!u.collapsible||void 0,"data-orientation":o.orientation,id:s.triggerId,...c,...r,ref:t})})});Sw.displayName=Hp;var Dw="AccordionContent",Fw=Y.forwardRef((e,t)=>{const{__scopeAccordion:n,...r}=e,o=Af(ba,n),s=Vp(Dw,n),u=Up(n);return f.jsx(LP,{role:"region","aria-labelledby":s.triggerId,"data-orientation":o.orientation,...u,...r,ref:t,style:{"--radix-accordion-content-height":"var(--radix-collapsible-content-height)","--radix-accordion-content-width":"var(--radix-collapsible-content-width)",...e.style}})});Fw.displayName=Dw;function Rw(e){return e?"open":"closed"}var qP=yw,ZP=Cw,WP=Ew,XP=Sw,$P=Fw;function Bw(e,[t,n]){return Math.min(n,Math.max(t,e))}var JP=[" ","Enter","ArrowUp","ArrowDown"],ez=[" ","Enter"],Zi="Select",[bf,xf,tz]=mf(Zi),[nu]=Vn(Zi,[tz,Qo]),_f=Qo(),[nz,Xo]=nu(Zi),[rz,az]=nu(Zi),kw=e=>{const{__scopeSelect:t,children:n,open:r,defaultOpen:o,onOpenChange:s,value:u,defaultValue:c,onValueChange:d,dir:p,name:m,autoComplete:g,disabled:y,required:A,form:w}=e,b=_f(t),[x,E]=C.useState(null),[S,F]=C.useState(null),[R,k]=C.useState(!1),B=eu(p),[N,P]=ir({prop:r,defaultProp:o??!1,onChange:s,caller:Zi}),[U,Q]=ir({prop:u,defaultProp:c,onChange:d,caller:Zi}),$=C.useRef(null),q=x?w||!!x.closest("form"):!0,[V,W]=C.useState(new Set),ae=Array.from(V).map(j=>j.props.value).join(";");return f.jsx(Gd,{...b,children:f.jsxs(nz,{required:A,scope:t,trigger:x,onTriggerChange:E,valueNode:S,onValueNodeChange:F,valueNodeHasChildren:R,onValueNodeHasChildrenChange:k,contentId:or(),value:U,onValueChange:Q,open:N,onOpenChange:P,dir:B,triggerPointerDownPosRef:$,disabled:y,children:[f.jsx(bf.Provider,{scope:t,children:f.jsx(rz,{scope:e.__scopeSelect,onNativeOptionAdd:C.useCallback(j=>{W(G=>new Set(G).add(j))},[]),onNativeOptionRemove:C.useCallback(j=>{W(G=>{const te=new Set(G);return te.delete(j),te})},[]),children:n})}),q?f.jsxs(Jw,{"aria-hidden":!0,required:A,tabIndex:-1,name:m,autoComplete:g,value:U,onChange:j=>Q(j.target.value),disabled:y,form:w,children:[U===void 0?f.jsx("option",{value:""}):null,Array.from(V)]},ae):null]})})};kw.displayName=Zi;var Mw="SelectTrigger",Nw=C.forwardRef((e,t)=>{const{__scopeSelect:n,disabled:r=!1,...o}=e,s=_f(n),u=Xo(Mw,n),c=u.disabled||r,d=nt(t,u.onTriggerChange),p=xf(n),m=C.useRef("touch"),[g,y,A]=t1(b=>{const x=p().filter(F=>!F.disabled),E=x.find(F=>F.value===u.value),S=n1(x,b,E);S!==void 0&&u.onValueChange(S.value)}),w=b=>{c||(u.onOpenChange(!0),A()),b&&(u.triggerPointerDownPosRef.current={x:Math.round(b.pageX),y:Math.round(b.pageY)})};return f.jsx(Tl,{asChild:!0,...s,children:f.jsx(Te.button,{type:"button",role:"combobox","aria-controls":u.contentId,"aria-expanded":u.open,"aria-required":u.required,"aria-autocomplete":"none",dir:u.dir,"data-state":u.open?"open":"closed",disabled:c,"data-disabled":c?"":void 0,"data-placeholder":e1(u.value)?"":void 0,...o,ref:d,onClick:_e(o.onClick,b=>{b.currentTarget.focus(),m.current!=="mouse"&&w(b)}),onPointerDown:_e(o.onPointerDown,b=>{m.current=b.pointerType;const x=b.target;x.hasPointerCapture(b.pointerId)&&x.releasePointerCapture(b.pointerId),b.button===0&&b.ctrlKey===!1&&b.pointerType==="mouse"&&(w(b),b.preventDefault())}),onKeyDown:_e(o.onKeyDown,b=>{const x=g.current!=="";!(b.ctrlKey||b.altKey||b.metaKey)&&b.key.length===1&&y(b.key),!(x&&b.key===" ")&&JP.includes(b.key)&&(w(),b.preventDefault())})})})});Nw.displayName=Mw;var Tw="SelectValue",jw=C.forwardRef((e,t)=>{const{__scopeSelect:n,className:r,style:o,children:s,placeholder:u="",...c}=e,d=Xo(Tw,n),{onValueNodeHasChildrenChange:p}=d,m=s!==void 0,g=nt(t,d.onValueNodeChange);return Bn(()=>{p(m)},[p,m]),f.jsx(Te.span,{...c,ref:g,style:{pointerEvents:"none"},children:e1(d.value)?f.jsx(f.Fragment,{children:u}):s})});jw.displayName=Tw;var oz="SelectIcon",Pw=C.forwardRef((e,t)=>{const{__scopeSelect:n,children:r,...o}=e;return f.jsx(Te.span,{"aria-hidden":!0,...o,ref:t,children:r||"▼"})});Pw.displayName=oz;var iz="SelectPortal",zw=e=>f.jsx(Us,{asChild:!0,...e});zw.displayName=iz;var Wi="SelectContent",Lw=C.forwardRef((e,t)=>{const n=Xo(Wi,e.__scopeSelect),[r,o]=C.useState();if(Bn(()=>{o(new DocumentFragment)},[]),!n.open){const s=r;return s?El.createPortal(f.jsx(Ow,{scope:e.__scopeSelect,children:f.jsx(bf.Slot,{scope:e.__scopeSelect,children:f.jsx("div",{children:e.children})})}),s):null}return f.jsx(Iw,{...e,ref:t})});Lw.displayName=Wi;var xa=10,[Ow,$o]=nu(Wi),sz="SelectContentImpl",uz=Ui("SelectContent.RemoveScroll"),Iw=C.forwardRef((e,t)=>{const{__scopeSelect:n,position:r="item-aligned",onCloseAutoFocus:o,onEscapeKeyDown:s,onPointerDownOutside:u,side:c,sideOffset:d,align:p,alignOffset:m,arrowPadding:g,collisionBoundary:y,collisionPadding:A,sticky:w,hideWhenDetached:b,avoidCollisions:x,...E}=e,S=Xo(Wi,n),[F,R]=C.useState(null),[k,B]=C.useState(null),N=nt(t,de=>R(de)),[P,U]=C.useState(null),[Q,$]=C.useState(null),q=xf(n),[V,W]=C.useState(!1),ae=C.useRef(!1);C.useEffect(()=>{if(F)return kd(F)},[F]),Cd();const j=C.useCallback(de=>{const[ye,...Ce]=q().map(st=>st.ref.current),[Ke]=Ce.slice(-1),Xe=document.activeElement;for(const st of de)if(st===Xe||(st?.scrollIntoView({block:"nearest"}),st===ye&&k&&(k.scrollTop=0),st===Ke&&k&&(k.scrollTop=k.scrollHeight),st?.focus(),document.activeElement!==Xe))return},[q,k]),G=C.useCallback(()=>j([P,F]),[j,P,F]);C.useEffect(()=>{V&&G()},[V,G]);const{onOpenChange:te,triggerPointerDownPosRef:ue}=S;C.useEffect(()=>{if(F){let de={x:0,y:0};const ye=Ke=>{de={x:Math.abs(Math.round(Ke.pageX)-(ue.current?.x??0)),y:Math.abs(Math.round(Ke.pageY)-(ue.current?.y??0))}},Ce=Ke=>{de.x<=10&&de.y<=10?Ke.preventDefault():F.contains(Ke.target)||te(!1),document.removeEventListener("pointermove",ye),ue.current=null};return ue.current!==null&&(document.addEventListener("pointermove",ye),document.addEventListener("pointerup",Ce,{capture:!0,once:!0})),()=>{document.removeEventListener("pointermove",ye),document.removeEventListener("pointerup",Ce,{capture:!0})}}},[F,te,ue]),C.useEffect(()=>{const de=()=>te(!1);return window.addEventListener("blur",de),window.addEventListener("resize",de),()=>{window.removeEventListener("blur",de),window.removeEventListener("resize",de)}},[te]);const[ie,z]=t1(de=>{const ye=q().filter(Xe=>!Xe.disabled),Ce=ye.find(Xe=>Xe.ref.current===document.activeElement),Ke=n1(ye,de,Ce);Ke&&setTimeout(()=>Ke.ref.current.focus())}),O=C.useCallback((de,ye,Ce)=>{const Ke=!ae.current&&!Ce;(S.value!==void 0&&S.value===ye||Ke)&&(U(de),Ke&&(ae.current=!0))},[S.value]),T=C.useCallback(()=>F?.focus(),[F]),J=C.useCallback((de,ye,Ce)=>{const Ke=!ae.current&&!Ce;(S.value!==void 0&&S.value===ye||Ke)&&$(de)},[S.value]),le=r==="popper"?Qp:Uw,me=le===Qp?{side:c,sideOffset:d,align:p,alignOffset:m,arrowPadding:g,collisionBoundary:y,collisionPadding:A,sticky:w,hideWhenDetached:b,avoidCollisions:x}:{};return f.jsx(Ow,{scope:n,content:F,viewport:k,onViewportChange:B,itemRefCallback:O,selectedItem:P,onItemLeave:T,itemTextRefCallback:J,focusSelectedItem:G,selectedItemText:Q,position:r,isPositioned:V,searchRef:ie,children:f.jsx(kl,{as:uz,allowPinchZoom:!0,children:f.jsx(Bl,{asChild:!0,trapped:S.open,onMountAutoFocus:de=>{de.preventDefault()},onUnmountAutoFocus:_e(o,de=>{S.trigger?.focus({preventScroll:!0}),de.preventDefault()}),children:f.jsx(Is,{asChild:!0,disableOutsidePointerEvents:!0,onEscapeKeyDown:s,onPointerDownOutside:u,onFocusOutside:de=>de.preventDefault(),onDismiss:()=>S.onOpenChange(!1),children:f.jsx(le,{role:"listbox",id:S.contentId,"data-state":S.open?"open":"closed",dir:S.dir,onContextMenu:de=>de.preventDefault(),...E,...me,onPlaced:()=>W(!0),ref:N,style:{display:"flex",flexDirection:"column",outline:"none",...E.style},onKeyDown:_e(E.onKeyDown,de=>{const ye=de.ctrlKey||de.altKey||de.metaKey;if(de.key==="Tab"&&de.preventDefault(),!ye&&de.key.length===1&&z(de.key),["ArrowUp","ArrowDown","Home","End"].includes(de.key)){let Ke=q().filter(Xe=>!Xe.disabled).map(Xe=>Xe.ref.current);if(["ArrowUp","End"].includes(de.key)&&(Ke=Ke.slice().reverse()),["ArrowUp","ArrowDown"].includes(de.key)){const Xe=de.target,st=Ke.indexOf(Xe);Ke=Ke.slice(st+1)}setTimeout(()=>j(Ke)),de.preventDefault()}})})})})})})});Iw.displayName=sz;var lz="SelectItemAlignedPosition",Uw=C.forwardRef((e,t)=>{const{__scopeSelect:n,onPlaced:r,...o}=e,s=Xo(Wi,n),u=$o(Wi,n),[c,d]=C.useState(null),[p,m]=C.useState(null),g=nt(t,N=>m(N)),y=xf(n),A=C.useRef(!1),w=C.useRef(!0),{viewport:b,selectedItem:x,selectedItemText:E,focusSelectedItem:S}=u,F=C.useCallback(()=>{if(s.trigger&&s.valueNode&&c&&p&&b&&x&&E){const N=s.trigger.getBoundingClientRect(),P=p.getBoundingClientRect(),U=s.valueNode.getBoundingClientRect(),Q=E.getBoundingClientRect();if(s.dir!=="rtl"){const Xe=Q.left-P.left,st=U.left-Xe,Wt=N.left-st,jt=N.width+Wt,Br=Math.max(jt,P.width),sr=window.innerWidth-xa,kr=Bw(st,[xa,Math.max(xa,sr-Br)]);c.style.minWidth=jt+"px",c.style.left=kr+"px"}else{const Xe=P.right-Q.right,st=window.innerWidth-U.right-Xe,Wt=window.innerWidth-N.right-st,jt=N.width+Wt,Br=Math.max(jt,P.width),sr=window.innerWidth-xa,kr=Bw(st,[xa,Math.max(xa,sr-Br)]);c.style.minWidth=jt+"px",c.style.right=kr+"px"}const $=y(),q=window.innerHeight-xa*2,V=b.scrollHeight,W=window.getComputedStyle(p),ae=parseInt(W.borderTopWidth,10),j=parseInt(W.paddingTop,10),G=parseInt(W.borderBottomWidth,10),te=parseInt(W.paddingBottom,10),ue=ae+j+V+te+G,ie=Math.min(x.offsetHeight*5,ue),z=window.getComputedStyle(b),O=parseInt(z.paddingTop,10),T=parseInt(z.paddingBottom,10),J=N.top+N.height/2-xa,le=q-J,me=x.offsetHeight/2,de=x.offsetTop+me,ye=ae+j+de,Ce=ue-ye;if(ye<=J){const Xe=$.length>0&&x===$[$.length-1].ref.current;c.style.bottom="0px";const st=p.clientHeight-b.offsetTop-b.offsetHeight,Wt=Math.max(le,me+(Xe?T:0)+st+G),jt=ye+Wt;c.style.height=jt+"px"}else{const Xe=$.length>0&&x===$[0].ref.current;c.style.top="0px";const Wt=Math.max(J,ae+b.offsetTop+(Xe?O:0)+me)+Ce;c.style.height=Wt+"px",b.scrollTop=ye-J+b.offsetTop}c.style.margin=`${xa}px 0`,c.style.minHeight=ie+"px",c.style.maxHeight=q+"px",r?.(),requestAnimationFrame(()=>A.current=!0)}},[y,s.trigger,s.valueNode,c,p,b,x,E,s.dir,r]);Bn(()=>F(),[F]);const[R,k]=C.useState();Bn(()=>{p&&k(window.getComputedStyle(p).zIndex)},[p]);const B=C.useCallback(N=>{N&&w.current===!0&&(F(),S?.(),w.current=!1)},[F,S]);return f.jsx(dz,{scope:n,contentWrapper:c,shouldExpandOnScrollRef:A,onScrollButtonChange:B,children:f.jsx("div",{ref:d,style:{display:"flex",flexDirection:"column",position:"fixed",zIndex:R},children:f.jsx(Te.div,{...o,ref:g,style:{boxSizing:"border-box",maxHeight:"100%",...o.style}})})})});Uw.displayName=lz;var cz="SelectPopperPosition",Qp=C.forwardRef((e,t)=>{const{__scopeSelect:n,align:r="start",collisionPadding:o=xa,...s}=e,u=_f(n);return f.jsx(Yd,{...u,...s,ref:t,align:r,collisionPadding:o,style:{boxSizing:"border-box",...s.style,"--radix-select-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-select-content-available-width":"var(--radix-popper-available-width)","--radix-select-content-available-height":"var(--radix-popper-available-height)","--radix-select-trigger-width":"var(--radix-popper-anchor-width)","--radix-select-trigger-height":"var(--radix-popper-anchor-height)"}})});Qp.displayName=cz;var[dz,Gp]=nu(Wi,{}),Yp="SelectViewport",Vw=C.forwardRef((e,t)=>{const{__scopeSelect:n,nonce:r,...o}=e,s=$o(Yp,n),u=Gp(Yp,n),c=nt(t,s.onViewportChange),d=C.useRef(0);return f.jsxs(f.Fragment,{children:[f.jsx("style",{dangerouslySetInnerHTML:{__html:"[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}"},nonce:r}),f.jsx(bf.Slot,{scope:n,children:f.jsx(Te.div,{"data-radix-select-viewport":"",role:"presentation",...o,ref:c,style:{position:"relative",flex:1,overflow:"hidden auto",...o.style},onScroll:_e(o.onScroll,p=>{const m=p.currentTarget,{contentWrapper:g,shouldExpandOnScrollRef:y}=u;if(y?.current&&g){const A=Math.abs(d.current-m.scrollTop);if(A>0){const w=window.innerHeight-xa*2,b=parseFloat(g.style.minHeight),x=parseFloat(g.style.height),E=Math.max(b,x);if(E0?R:0,g.style.justifyContent="flex-end")}}}d.current=m.scrollTop})})})]})});Vw.displayName=Yp;var Hw="SelectGroup",[fz,hz]=nu(Hw),mz=C.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,o=or();return f.jsx(fz,{scope:n,id:o,children:f.jsx(Te.div,{role:"group","aria-labelledby":o,...r,ref:t})})});mz.displayName=Hw;var Qw="SelectLabel",pz=C.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,o=hz(Qw,n);return f.jsx(Te.div,{id:o.id,...r,ref:t})});pz.displayName=Qw;var Cf="SelectItem",[gz,Gw]=nu(Cf),Yw=C.forwardRef((e,t)=>{const{__scopeSelect:n,value:r,disabled:o=!1,textValue:s,...u}=e,c=Xo(Cf,n),d=$o(Cf,n),p=c.value===r,[m,g]=C.useState(s??""),[y,A]=C.useState(!1),w=nt(t,S=>d.itemRefCallback?.(S,r,o)),b=or(),x=C.useRef("touch"),E=()=>{o||(c.onValueChange(r),c.onOpenChange(!1))};if(r==="")throw new Error("A must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.");return f.jsx(gz,{scope:n,value:r,disabled:o,textId:b,isSelected:p,onItemTextChange:C.useCallback(S=>{g(F=>F||(S?.textContent??"").trim())},[]),children:f.jsx(bf.ItemSlot,{scope:n,value:r,disabled:o,textValue:m,children:f.jsx(Te.div,{role:"option","aria-labelledby":b,"data-highlighted":y?"":void 0,"aria-selected":p&&y,"data-state":p?"checked":"unchecked","aria-disabled":o||void 0,"data-disabled":o?"":void 0,tabIndex:o?void 0:-1,...u,ref:w,onFocus:_e(u.onFocus,()=>A(!0)),onBlur:_e(u.onBlur,()=>A(!1)),onClick:_e(u.onClick,()=>{x.current!=="mouse"&&E()}),onPointerUp:_e(u.onPointerUp,()=>{x.current==="mouse"&&E()}),onPointerDown:_e(u.onPointerDown,S=>{x.current=S.pointerType}),onPointerMove:_e(u.onPointerMove,S=>{x.current=S.pointerType,o?d.onItemLeave?.():x.current==="mouse"&&S.currentTarget.focus({preventScroll:!0})}),onPointerLeave:_e(u.onPointerLeave,S=>{S.currentTarget===document.activeElement&&d.onItemLeave?.()}),onKeyDown:_e(u.onKeyDown,S=>{d.searchRef?.current!==""&&S.key===" "||(ez.includes(S.key)&&E(),S.key===" "&&S.preventDefault())})})})})});Yw.displayName=Cf;var Kl="SelectItemText",Kw=C.forwardRef((e,t)=>{const{__scopeSelect:n,className:r,style:o,...s}=e,u=Xo(Kl,n),c=$o(Kl,n),d=Gw(Kl,n),p=az(Kl,n),[m,g]=C.useState(null),y=nt(t,E=>g(E),d.onItemTextChange,E=>c.itemTextRefCallback?.(E,d.value,d.disabled)),A=m?.textContent,w=C.useMemo(()=>f.jsx("option",{value:d.value,disabled:d.disabled,children:A},d.value),[d.disabled,d.value,A]),{onNativeOptionAdd:b,onNativeOptionRemove:x}=p;return Bn(()=>(b(w),()=>x(w)),[b,x,w]),f.jsxs(f.Fragment,{children:[f.jsx(Te.span,{id:d.textId,...s,ref:y}),d.isSelected&&u.valueNode&&!u.valueNodeHasChildren?El.createPortal(s.children,u.valueNode):null]})});Kw.displayName=Kl;var qw="SelectItemIndicator",Zw=C.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e;return Gw(qw,n).isSelected?f.jsx(Te.span,{"aria-hidden":!0,...r,ref:t}):null});Zw.displayName=qw;var Kp="SelectScrollUpButton",Ww=C.forwardRef((e,t)=>{const n=$o(Kp,e.__scopeSelect),r=Gp(Kp,e.__scopeSelect),[o,s]=C.useState(!1),u=nt(t,r.onScrollButtonChange);return Bn(()=>{if(n.viewport&&n.isPositioned){let c=function(){const p=d.scrollTop>0;s(p)};const d=n.viewport;return c(),d.addEventListener("scroll",c),()=>d.removeEventListener("scroll",c)}},[n.viewport,n.isPositioned]),o?f.jsx($w,{...e,ref:u,onAutoScroll:()=>{const{viewport:c,selectedItem:d}=n;c&&d&&(c.scrollTop=c.scrollTop-d.offsetHeight)}}):null});Ww.displayName=Kp;var qp="SelectScrollDownButton",Xw=C.forwardRef((e,t)=>{const n=$o(qp,e.__scopeSelect),r=Gp(qp,e.__scopeSelect),[o,s]=C.useState(!1),u=nt(t,r.onScrollButtonChange);return Bn(()=>{if(n.viewport&&n.isPositioned){let c=function(){const p=d.scrollHeight-d.clientHeight,m=Math.ceil(d.scrollTop)d.removeEventListener("scroll",c)}},[n.viewport,n.isPositioned]),o?f.jsx($w,{...e,ref:u,onAutoScroll:()=>{const{viewport:c,selectedItem:d}=n;c&&d&&(c.scrollTop=c.scrollTop+d.offsetHeight)}}):null});Xw.displayName=qp;var $w=C.forwardRef((e,t)=>{const{__scopeSelect:n,onAutoScroll:r,...o}=e,s=$o("SelectScrollButton",n),u=C.useRef(null),c=xf(n),d=C.useCallback(()=>{u.current!==null&&(window.clearInterval(u.current),u.current=null)},[]);return C.useEffect(()=>()=>d(),[d]),Bn(()=>{c().find(m=>m.ref.current===document.activeElement)?.ref.current?.scrollIntoView({block:"nearest"})},[c]),f.jsx(Te.div,{"aria-hidden":!0,...o,ref:t,style:{flexShrink:0,...o.style},onPointerDown:_e(o.onPointerDown,()=>{u.current===null&&(u.current=window.setInterval(r,50))}),onPointerMove:_e(o.onPointerMove,()=>{s.onItemLeave?.(),u.current===null&&(u.current=window.setInterval(r,50))}),onPointerLeave:_e(o.onPointerLeave,()=>{d()})})}),vz="SelectSeparator",Az=C.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e;return f.jsx(Te.div,{"aria-hidden":!0,...r,ref:t})});Az.displayName=vz;var Zp="SelectArrow",yz=C.forwardRef((e,t)=>{const{__scopeSelect:n,...r}=e,o=_f(n),s=Xo(Zp,n),u=$o(Zp,n);return s.open&&u.position==="popper"?f.jsx(Kd,{...o,...r,ref:t}):null});yz.displayName=Zp;var bz="SelectBubbleInput",Jw=C.forwardRef(({__scopeSelect:e,value:t,...n},r)=>{const o=C.useRef(null),s=nt(r,o),u=rf(t);return C.useEffect(()=>{const c=o.current;if(!c)return;const d=window.HTMLSelectElement.prototype,m=Object.getOwnPropertyDescriptor(d,"value").set;if(u!==t&&m){const g=new Event("change",{bubbles:!0});m.call(c,t),c.dispatchEvent(g)}},[u,t]),f.jsx(Te.select,{...n,style:{...Y_,...n.style},ref:s,defaultValue:t})});Jw.displayName=bz;function e1(e){return e===""||e===void 0}function t1(e){const t=Pa(e),n=C.useRef(""),r=C.useRef(0),o=C.useCallback(u=>{const c=n.current+u;t(c),(function d(p){n.current=p,window.clearTimeout(r.current),p!==""&&(r.current=window.setTimeout(()=>d(""),1e3))})(c)},[t]),s=C.useCallback(()=>{n.current="",window.clearTimeout(r.current)},[]);return C.useEffect(()=>()=>window.clearTimeout(r.current),[]),[n,o,s]}function n1(e,t,n){const o=t.length>1&&Array.from(t).every(p=>p===t[0])?t[0]:t,s=n?e.indexOf(n):-1;let u=xz(e,Math.max(s,0));o.length===1&&(u=u.filter(p=>p!==n));const d=u.find(p=>p.textValue.toLowerCase().startsWith(o.toLowerCase()));return d!==n?d:void 0}function xz(e,t){return e.map((n,r)=>e[(t+r)%e.length])}var _z=kw,Cz=Nw,wz=jw,Ez=Pw,Sz=zw,Dz=Lw,Fz=Vw,Rz=Yw,Bz=Kw,kz=Zw,Mz=Ww,Nz=Xw,wf="Tabs",[Tz]=Vn(wf,[tu]),r1=tu(),[jz,Wp]=Tz(wf),a1=C.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,onValueChange:o,defaultValue:s,orientation:u="horizontal",dir:c,activationMode:d="automatic",...p}=e,m=eu(c),[g,y]=ir({prop:r,onChange:o,defaultProp:s??"",caller:wf});return f.jsx(jz,{scope:n,baseId:or(),value:g,onValueChange:y,orientation:u,dir:m,activationMode:d,children:f.jsx(Te.div,{dir:m,"data-orientation":u,...p,ref:t})})});a1.displayName=wf;var o1="TabsList",i1=C.forwardRef((e,t)=>{const{__scopeTabs:n,loop:r=!0,...o}=e,s=Wp(o1,n),u=r1(n);return f.jsx(Tp,{asChild:!0,...u,orientation:s.orientation,dir:s.dir,loop:r,children:f.jsx(Te.div,{role:"tablist","aria-orientation":s.orientation,...o,ref:t})})});i1.displayName=o1;var s1="TabsTrigger",u1=C.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,disabled:o=!1,...s}=e,u=Wp(s1,n),c=r1(n),d=d1(u.baseId,r),p=f1(u.baseId,r),m=r===u.value;return f.jsx(jp,{asChild:!0,...c,focusable:!o,active:m,children:f.jsx(Te.button,{type:"button",role:"tab","aria-selected":m,"aria-controls":p,"data-state":m?"active":"inactive","data-disabled":o?"":void 0,disabled:o,id:d,...s,ref:t,onMouseDown:_e(e.onMouseDown,g=>{!o&&g.button===0&&g.ctrlKey===!1?u.onValueChange(r):g.preventDefault()}),onKeyDown:_e(e.onKeyDown,g=>{[" ","Enter"].includes(g.key)&&u.onValueChange(r)}),onFocus:_e(e.onFocus,()=>{const g=u.activationMode!=="manual";!m&&!o&&g&&u.onValueChange(r)})})})});u1.displayName=s1;var l1="TabsContent",c1=C.forwardRef((e,t)=>{const{__scopeTabs:n,value:r,forceMount:o,children:s,...u}=e,c=Wp(l1,n),d=d1(c.baseId,r),p=f1(c.baseId,r),m=r===c.value,g=C.useRef(m);return C.useEffect(()=>{const y=requestAnimationFrame(()=>g.current=!1);return()=>cancelAnimationFrame(y)},[]),f.jsx(Hn,{present:o||m,children:({present:y})=>f.jsx(Te.div,{"data-state":m?"active":"inactive","data-orientation":c.orientation,role:"tabpanel","aria-labelledby":d,hidden:!y,id:p,tabIndex:0,...u,ref:t,style:{...e.style,animationDuration:g.current?"0s":void 0},children:y&&s})})});c1.displayName=l1;function d1(e,t){return`${e}-trigger-${t}`}function f1(e,t){return`${e}-content-${t}`}var Pz=a1,zz=i1,Lz=u1,Oz=c1,Xp=["Enter"," "],Iz=["ArrowDown","PageUp","Home"],h1=["ArrowUp","PageDown","End"],Uz=[...Iz,...h1],Vz={ltr:[...Xp,"ArrowRight"],rtl:[...Xp,"ArrowLeft"]},Hz={ltr:["ArrowLeft"],rtl:["ArrowRight"]},ql="Menu",[Zl,Qz,Gz]=mf(ql),[Xi,m1]=Vn(ql,[Gz,Qo,tu]),Ef=Qo(),p1=tu(),[Yz,$i]=Xi(ql),[Kz,Wl]=Xi(ql),g1=e=>{const{__scopeMenu:t,open:n=!1,children:r,dir:o,onOpenChange:s,modal:u=!0}=e,c=Ef(t),[d,p]=C.useState(null),m=C.useRef(!1),g=Pa(s),y=eu(o);return C.useEffect(()=>{const A=()=>{m.current=!0,document.addEventListener("pointerdown",w,{capture:!0,once:!0}),document.addEventListener("pointermove",w,{capture:!0,once:!0})},w=()=>m.current=!1;return document.addEventListener("keydown",A,{capture:!0}),()=>{document.removeEventListener("keydown",A,{capture:!0}),document.removeEventListener("pointerdown",w,{capture:!0}),document.removeEventListener("pointermove",w,{capture:!0})}},[]),f.jsx(Gd,{...c,children:f.jsx(Yz,{scope:t,open:n,onOpenChange:g,content:d,onContentChange:p,children:f.jsx(Kz,{scope:t,onClose:C.useCallback(()=>g(!1),[g]),isUsingKeyboardRef:m,dir:y,modal:u,children:r})})})};g1.displayName=ql;var qz="MenuAnchor",$p=C.forwardRef((e,t)=>{const{__scopeMenu:n,...r}=e,o=Ef(n);return f.jsx(Tl,{...o,...r,ref:t})});$p.displayName=qz;var Jp="MenuPortal",[Zz,v1]=Xi(Jp,{forceMount:void 0}),A1=e=>{const{__scopeMenu:t,forceMount:n,children:r,container:o}=e,s=$i(Jp,t);return f.jsx(Zz,{scope:t,forceMount:n,children:f.jsx(Hn,{present:n||s.open,children:f.jsx(Us,{asChild:!0,container:o,children:r})})})};A1.displayName=Jp;var Jr="MenuContent",[Wz,eg]=Xi(Jr),y1=C.forwardRef((e,t)=>{const n=v1(Jr,e.__scopeMenu),{forceMount:r=n.forceMount,...o}=e,s=$i(Jr,e.__scopeMenu),u=Wl(Jr,e.__scopeMenu);return f.jsx(Zl.Provider,{scope:e.__scopeMenu,children:f.jsx(Hn,{present:r||s.open,children:f.jsx(Zl.Slot,{scope:e.__scopeMenu,children:u.modal?f.jsx(Xz,{...o,ref:t}):f.jsx($z,{...o,ref:t})})})})}),Xz=C.forwardRef((e,t)=>{const n=$i(Jr,e.__scopeMenu),r=C.useRef(null),o=nt(t,r);return C.useEffect(()=>{const s=r.current;if(s)return kd(s)},[]),f.jsx(tg,{...e,ref:o,trapFocus:n.open,disableOutsidePointerEvents:n.open,disableOutsideScroll:!0,onFocusOutside:_e(e.onFocusOutside,s=>s.preventDefault(),{checkForDefaultPrevented:!1}),onDismiss:()=>n.onOpenChange(!1)})}),$z=C.forwardRef((e,t)=>{const n=$i(Jr,e.__scopeMenu);return f.jsx(tg,{...e,ref:t,trapFocus:!1,disableOutsidePointerEvents:!1,disableOutsideScroll:!1,onDismiss:()=>n.onOpenChange(!1)})}),Jz=Ui("MenuContent.ScrollLock"),tg=C.forwardRef((e,t)=>{const{__scopeMenu:n,loop:r=!1,trapFocus:o,onOpenAutoFocus:s,onCloseAutoFocus:u,disableOutsidePointerEvents:c,onEntryFocus:d,onEscapeKeyDown:p,onPointerDownOutside:m,onFocusOutside:g,onInteractOutside:y,onDismiss:A,disableOutsideScroll:w,...b}=e,x=$i(Jr,n),E=Wl(Jr,n),S=Ef(n),F=p1(n),R=Qz(n),[k,B]=C.useState(null),N=C.useRef(null),P=nt(t,N,x.onContentChange),U=C.useRef(0),Q=C.useRef(""),$=C.useRef(0),q=C.useRef(null),V=C.useRef("right"),W=C.useRef(0),ae=w?kl:C.Fragment,j=w?{as:Jz,allowPinchZoom:!0}:void 0,G=ue=>{const ie=Q.current+ue,z=R().filter(de=>!de.disabled),O=document.activeElement,T=z.find(de=>de.ref.current===O)?.textValue,J=z.map(de=>de.textValue),le=dL(J,ie,T),me=z.find(de=>de.textValue===le)?.ref.current;(function de(ye){Q.current=ye,window.clearTimeout(U.current),ye!==""&&(U.current=window.setTimeout(()=>de(""),1e3))})(ie),me&&setTimeout(()=>me.focus())};C.useEffect(()=>()=>window.clearTimeout(U.current),[]),Cd();const te=C.useCallback(ue=>V.current===q.current?.side&&hL(ue,q.current?.area),[]);return f.jsx(Wz,{scope:n,searchRef:Q,onItemEnter:C.useCallback(ue=>{te(ue)&&ue.preventDefault()},[te]),onItemLeave:C.useCallback(ue=>{te(ue)||(N.current?.focus(),B(null))},[te]),onTriggerLeave:C.useCallback(ue=>{te(ue)&&ue.preventDefault()},[te]),pointerGraceTimerRef:$,onPointerGraceIntentChange:C.useCallback(ue=>{q.current=ue},[]),children:f.jsx(ae,{...j,children:f.jsx(Bl,{asChild:!0,trapped:o,onMountAutoFocus:_e(s,ue=>{ue.preventDefault(),N.current?.focus({preventScroll:!0})}),onUnmountAutoFocus:u,children:f.jsx(Is,{asChild:!0,disableOutsidePointerEvents:c,onEscapeKeyDown:p,onPointerDownOutside:m,onFocusOutside:g,onInteractOutside:y,onDismiss:A,children:f.jsx(Tp,{asChild:!0,...F,dir:E.dir,orientation:"vertical",loop:r,currentTabStopId:k,onCurrentTabStopIdChange:B,onEntryFocus:_e(d,ue=>{E.isUsingKeyboardRef.current||ue.preventDefault()}),preventScrollOnEntryFocus:!0,children:f.jsx(Yd,{role:"menu","aria-orientation":"vertical","data-state":P1(x.open),"data-radix-menu-content":"",dir:E.dir,...S,...b,ref:P,style:{outline:"none",...b.style},onKeyDown:_e(b.onKeyDown,ue=>{const z=ue.target.closest("[data-radix-menu-content]")===ue.currentTarget,O=ue.ctrlKey||ue.altKey||ue.metaKey,T=ue.key.length===1;z&&(ue.key==="Tab"&&ue.preventDefault(),!O&&T&&G(ue.key));const J=N.current;if(ue.target!==J||!Uz.includes(ue.key))return;ue.preventDefault();const me=R().filter(de=>!de.disabled).map(de=>de.ref.current);h1.includes(ue.key)&&me.reverse(),lL(me)}),onBlur:_e(e.onBlur,ue=>{ue.currentTarget.contains(ue.target)||(window.clearTimeout(U.current),Q.current="")}),onPointerMove:_e(e.onPointerMove,$l(ue=>{const ie=ue.target,z=W.current!==ue.clientX;if(ue.currentTarget.contains(ie)&&z){const O=ue.clientX>W.current?"right":"left";V.current=O,W.current=ue.clientX}}))})})})})})})});y1.displayName=Jr;var eL="MenuGroup",ng=C.forwardRef((e,t)=>{const{__scopeMenu:n,...r}=e;return f.jsx(Te.div,{role:"group",...r,ref:t})});ng.displayName=eL;var tL="MenuLabel",b1=C.forwardRef((e,t)=>{const{__scopeMenu:n,...r}=e;return f.jsx(Te.div,{...r,ref:t})});b1.displayName=tL;var Sf="MenuItem",x1="menu.itemSelect",Df=C.forwardRef((e,t)=>{const{disabled:n=!1,onSelect:r,...o}=e,s=C.useRef(null),u=Wl(Sf,e.__scopeMenu),c=eg(Sf,e.__scopeMenu),d=nt(t,s),p=C.useRef(!1),m=()=>{const g=s.current;if(!n&&g){const y=new CustomEvent(x1,{bubbles:!0,cancelable:!0});g.addEventListener(x1,A=>r?.(A),{once:!0}),jb(g,y),y.defaultPrevented?p.current=!1:u.onClose()}};return f.jsx(_1,{...o,ref:d,disabled:n,onClick:_e(e.onClick,m),onPointerDown:g=>{e.onPointerDown?.(g),p.current=!0},onPointerUp:_e(e.onPointerUp,g=>{p.current||g.currentTarget?.click()}),onKeyDown:_e(e.onKeyDown,g=>{const y=c.searchRef.current!=="";n||y&&g.key===" "||Xp.includes(g.key)&&(g.currentTarget.click(),g.preventDefault())})})});Df.displayName=Sf;var _1=C.forwardRef((e,t)=>{const{__scopeMenu:n,disabled:r=!1,textValue:o,...s}=e,u=eg(Sf,n),c=p1(n),d=C.useRef(null),p=nt(t,d),[m,g]=C.useState(!1),[y,A]=C.useState("");return C.useEffect(()=>{const w=d.current;w&&A((w.textContent??"").trim())},[s.children]),f.jsx(Zl.ItemSlot,{scope:n,disabled:r,textValue:o??y,children:f.jsx(jp,{asChild:!0,...c,focusable:!r,children:f.jsx(Te.div,{role:"menuitem","data-highlighted":m?"":void 0,"aria-disabled":r||void 0,"data-disabled":r?"":void 0,...s,ref:p,onPointerMove:_e(e.onPointerMove,$l(w=>{r?u.onItemLeave(w):(u.onItemEnter(w),w.defaultPrevented||w.currentTarget.focus({preventScroll:!0}))})),onPointerLeave:_e(e.onPointerLeave,$l(w=>u.onItemLeave(w))),onFocus:_e(e.onFocus,()=>g(!0)),onBlur:_e(e.onBlur,()=>g(!1))})})})}),nL="MenuCheckboxItem",C1=C.forwardRef((e,t)=>{const{checked:n=!1,onCheckedChange:r,...o}=e;return f.jsx(F1,{scope:e.__scopeMenu,checked:n,children:f.jsx(Df,{role:"menuitemcheckbox","aria-checked":Ff(n)?"mixed":n,...o,ref:t,"data-state":ag(n),onSelect:_e(o.onSelect,()=>r?.(Ff(n)?!0:!n),{checkForDefaultPrevented:!1})})})});C1.displayName=nL;var w1="MenuRadioGroup",[rL,aL]=Xi(w1,{value:void 0,onValueChange:()=>{}}),E1=C.forwardRef((e,t)=>{const{value:n,onValueChange:r,...o}=e,s=Pa(r);return f.jsx(rL,{scope:e.__scopeMenu,value:n,onValueChange:s,children:f.jsx(ng,{...o,ref:t})})});E1.displayName=w1;var S1="MenuRadioItem",D1=C.forwardRef((e,t)=>{const{value:n,...r}=e,o=aL(S1,e.__scopeMenu),s=n===o.value;return f.jsx(F1,{scope:e.__scopeMenu,checked:s,children:f.jsx(Df,{role:"menuitemradio","aria-checked":s,...r,ref:t,"data-state":ag(s),onSelect:_e(r.onSelect,()=>o.onValueChange?.(n),{checkForDefaultPrevented:!1})})})});D1.displayName=S1;var rg="MenuItemIndicator",[F1,oL]=Xi(rg,{checked:!1}),R1=C.forwardRef((e,t)=>{const{__scopeMenu:n,forceMount:r,...o}=e,s=oL(rg,n);return f.jsx(Hn,{present:r||Ff(s.checked)||s.checked===!0,children:f.jsx(Te.span,{...o,ref:t,"data-state":ag(s.checked)})})});R1.displayName=rg;var iL="MenuSeparator",B1=C.forwardRef((e,t)=>{const{__scopeMenu:n,...r}=e;return f.jsx(Te.div,{role:"separator","aria-orientation":"horizontal",...r,ref:t})});B1.displayName=iL;var sL="MenuArrow",k1=C.forwardRef((e,t)=>{const{__scopeMenu:n,...r}=e,o=Ef(n);return f.jsx(Kd,{...o,...r,ref:t})});k1.displayName=sL;var uL="MenuSub",[GG,M1]=Xi(uL),Xl="MenuSubTrigger",N1=C.forwardRef((e,t)=>{const n=$i(Xl,e.__scopeMenu),r=Wl(Xl,e.__scopeMenu),o=M1(Xl,e.__scopeMenu),s=eg(Xl,e.__scopeMenu),u=C.useRef(null),{pointerGraceTimerRef:c,onPointerGraceIntentChange:d}=s,p={__scopeMenu:e.__scopeMenu},m=C.useCallback(()=>{u.current&&window.clearTimeout(u.current),u.current=null},[]);return C.useEffect(()=>m,[m]),C.useEffect(()=>{const g=c.current;return()=>{window.clearTimeout(g),d(null)}},[c,d]),f.jsx($p,{asChild:!0,...p,children:f.jsx(_1,{id:o.triggerId,"aria-haspopup":"menu","aria-expanded":n.open,"aria-controls":o.contentId,"data-state":P1(n.open),...e,ref:Rl(t,o.onTriggerChange),onClick:g=>{e.onClick?.(g),!(e.disabled||g.defaultPrevented)&&(g.currentTarget.focus(),n.open||n.onOpenChange(!0))},onPointerMove:_e(e.onPointerMove,$l(g=>{s.onItemEnter(g),!g.defaultPrevented&&!e.disabled&&!n.open&&!u.current&&(s.onPointerGraceIntentChange(null),u.current=window.setTimeout(()=>{n.onOpenChange(!0),m()},100))})),onPointerLeave:_e(e.onPointerLeave,$l(g=>{m();const y=n.content?.getBoundingClientRect();if(y){const A=n.content?.dataset.side,w=A==="right",b=w?-5:5,x=y[w?"left":"right"],E=y[w?"right":"left"];s.onPointerGraceIntentChange({area:[{x:g.clientX+b,y:g.clientY},{x,y:y.top},{x:E,y:y.top},{x:E,y:y.bottom},{x,y:y.bottom}],side:A}),window.clearTimeout(c.current),c.current=window.setTimeout(()=>s.onPointerGraceIntentChange(null),300)}else{if(s.onTriggerLeave(g),g.defaultPrevented)return;s.onPointerGraceIntentChange(null)}})),onKeyDown:_e(e.onKeyDown,g=>{const y=s.searchRef.current!=="";e.disabled||y&&g.key===" "||Vz[r.dir].includes(g.key)&&(n.onOpenChange(!0),n.content?.focus(),g.preventDefault())})})})});N1.displayName=Xl;var T1="MenuSubContent",j1=C.forwardRef((e,t)=>{const n=v1(Jr,e.__scopeMenu),{forceMount:r=n.forceMount,...o}=e,s=$i(Jr,e.__scopeMenu),u=Wl(Jr,e.__scopeMenu),c=M1(T1,e.__scopeMenu),d=C.useRef(null),p=nt(t,d);return f.jsx(Zl.Provider,{scope:e.__scopeMenu,children:f.jsx(Hn,{present:r||s.open,children:f.jsx(Zl.Slot,{scope:e.__scopeMenu,children:f.jsx(tg,{id:c.contentId,"aria-labelledby":c.triggerId,...o,ref:p,align:"start",side:u.dir==="rtl"?"left":"right",disableOutsidePointerEvents:!1,disableOutsideScroll:!1,trapFocus:!1,onOpenAutoFocus:m=>{u.isUsingKeyboardRef.current&&d.current?.focus(),m.preventDefault()},onCloseAutoFocus:m=>m.preventDefault(),onFocusOutside:_e(e.onFocusOutside,m=>{m.target!==c.trigger&&s.onOpenChange(!1)}),onEscapeKeyDown:_e(e.onEscapeKeyDown,m=>{u.onClose(),m.preventDefault()}),onKeyDown:_e(e.onKeyDown,m=>{const g=m.currentTarget.contains(m.target),y=Hz[u.dir].includes(m.key);g&&y&&(s.onOpenChange(!1),c.trigger?.focus(),m.preventDefault())})})})})})});j1.displayName=T1;function P1(e){return e?"open":"closed"}function Ff(e){return e==="indeterminate"}function ag(e){return Ff(e)?"indeterminate":e?"checked":"unchecked"}function lL(e){const t=document.activeElement;for(const n of e)if(n===t||(n.focus(),document.activeElement!==t))return}function cL(e,t){return e.map((n,r)=>e[(t+r)%e.length])}function dL(e,t,n){const o=t.length>1&&Array.from(t).every(p=>p===t[0])?t[0]:t,s=n?e.indexOf(n):-1;let u=cL(e,Math.max(s,0));o.length===1&&(u=u.filter(p=>p!==n));const d=u.find(p=>p.toLowerCase().startsWith(o.toLowerCase()));return d!==n?d:void 0}function fL(e,t){const{x:n,y:r}=e;let o=!1;for(let s=0,u=t.length-1;sr!=y>r&&n<(g-p)*(r-m)/(y-m)+p&&(o=!o)}return o}function hL(e,t){if(!t)return!1;const n={x:e.clientX,y:e.clientY};return fL(n,t)}function $l(e){return t=>t.pointerType==="mouse"?e(t):void 0}var mL=g1,pL=$p,gL=A1,vL=y1,AL=ng,yL=b1,bL=Df,xL=C1,_L=E1,CL=D1,wL=R1,EL=B1,SL=k1,DL=N1,FL=j1,Rf="DropdownMenu",[RL]=Vn(Rf,[m1]),$n=m1(),[BL,z1]=RL(Rf),L1=e=>{const{__scopeDropdownMenu:t,children:n,dir:r,open:o,defaultOpen:s,onOpenChange:u,modal:c=!0}=e,d=$n(t),p=C.useRef(null),[m,g]=ir({prop:o,defaultProp:s??!1,onChange:u,caller:Rf});return f.jsx(BL,{scope:t,triggerId:or(),triggerRef:p,contentId:or(),open:m,onOpenChange:g,onOpenToggle:C.useCallback(()=>g(y=>!y),[g]),modal:c,children:f.jsx(mL,{...d,open:m,onOpenChange:g,dir:r,modal:c,children:n})})};L1.displayName=Rf;var O1="DropdownMenuTrigger",I1=C.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,disabled:r=!1,...o}=e,s=z1(O1,n),u=$n(n);return f.jsx(pL,{asChild:!0,...u,children:f.jsx(Te.button,{type:"button",id:s.triggerId,"aria-haspopup":"menu","aria-expanded":s.open,"aria-controls":s.open?s.contentId:void 0,"data-state":s.open?"open":"closed","data-disabled":r?"":void 0,disabled:r,...o,ref:Rl(t,s.triggerRef),onPointerDown:_e(e.onPointerDown,c=>{!r&&c.button===0&&c.ctrlKey===!1&&(s.onOpenToggle(),s.open||c.preventDefault())}),onKeyDown:_e(e.onKeyDown,c=>{r||(["Enter"," "].includes(c.key)&&s.onOpenToggle(),c.key==="ArrowDown"&&s.onOpenChange(!0),["Enter"," ","ArrowDown"].includes(c.key)&&c.preventDefault())})})})});I1.displayName=O1;var kL="DropdownMenuPortal",U1=e=>{const{__scopeDropdownMenu:t,...n}=e,r=$n(t);return f.jsx(gL,{...r,...n})};U1.displayName=kL;var V1="DropdownMenuContent",H1=C.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=z1(V1,n),s=$n(n),u=C.useRef(!1);return f.jsx(vL,{id:o.contentId,"aria-labelledby":o.triggerId,...s,...r,ref:t,onCloseAutoFocus:_e(e.onCloseAutoFocus,c=>{u.current||o.triggerRef.current?.focus(),u.current=!1,c.preventDefault()}),onInteractOutside:_e(e.onInteractOutside,c=>{const d=c.detail.originalEvent,p=d.button===0&&d.ctrlKey===!0,m=d.button===2||p;(!o.modal||m)&&(u.current=!0)}),style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});H1.displayName=V1;var ML="DropdownMenuGroup",NL=C.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=$n(n);return f.jsx(AL,{...o,...r,ref:t})});NL.displayName=ML;var TL="DropdownMenuLabel",jL=C.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=$n(n);return f.jsx(yL,{...o,...r,ref:t})});jL.displayName=TL;var PL="DropdownMenuItem",Q1=C.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=$n(n);return f.jsx(bL,{...o,...r,ref:t})});Q1.displayName=PL;var zL="DropdownMenuCheckboxItem",LL=C.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=$n(n);return f.jsx(xL,{...o,...r,ref:t})});LL.displayName=zL;var OL="DropdownMenuRadioGroup",IL=C.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=$n(n);return f.jsx(_L,{...o,...r,ref:t})});IL.displayName=OL;var UL="DropdownMenuRadioItem",VL=C.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=$n(n);return f.jsx(CL,{...o,...r,ref:t})});VL.displayName=UL;var HL="DropdownMenuItemIndicator",QL=C.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=$n(n);return f.jsx(wL,{...o,...r,ref:t})});QL.displayName=HL;var GL="DropdownMenuSeparator",YL=C.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=$n(n);return f.jsx(EL,{...o,...r,ref:t})});YL.displayName=GL;var KL="DropdownMenuArrow",qL=C.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=$n(n);return f.jsx(SL,{...o,...r,ref:t})});qL.displayName=KL;var ZL="DropdownMenuSubTrigger",WL=C.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=$n(n);return f.jsx(DL,{...o,...r,ref:t})});WL.displayName=ZL;var XL="DropdownMenuSubContent",$L=C.forwardRef((e,t)=>{const{__scopeDropdownMenu:n,...r}=e,o=$n(n);return f.jsx(FL,{...o,...r,ref:t,style:{...e.style,"--radix-dropdown-menu-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-dropdown-menu-content-available-width":"var(--radix-popper-available-width)","--radix-dropdown-menu-content-available-height":"var(--radix-popper-available-height)","--radix-dropdown-menu-trigger-width":"var(--radix-popper-anchor-width)","--radix-dropdown-menu-trigger-height":"var(--radix-popper-anchor-height)"}})});$L.displayName=XL;var JL=L1,eO=I1,G1=U1,tO=H1,nO=Q1;function qt(){return qt=Object.assign?Object.assign.bind():function(e){for(var t=1;t{var t=e.r,n=e.g,r=e.b,o=e.a,s=Math.max(t,n,r),u=s-Math.min(t,n,r),c=u?s===t?(n-r)/u:s===n?2+(r-t)/u:4+(t-n)/u:0;return{h:60*(c<0?c+6:c),s:s?u/s*Jo:0,v:s/ru*Jo,a:o}},Y1=e=>{var t=aO(e),n=t.h,r=t.s,o=t.l,s=t.a;return"hsla("+n+", "+r+"%, "+o+"%, "+s+")"},aO=e=>{var t=e.h,n=e.s,r=e.v,o=e.a,s=(200-n)*r/Jo;return{h:t,s:s>0&&s<200?n*r/Jo/(s<=Jo?s:200-s)*Jo:0,l:s/2,a:o}},oO=e=>{var t=e.r,n=e.g,r=e.b,o=t<<16|n<<8|r;return"#"+(s=>new Array(7-s.length).join("0")+s)(o.toString(16))},au=e=>rO(iO(e)),iO=e=>{var t=e.replace("#","");/^#?/.test(e)&&t.length===3&&(e="#"+t.charAt(0)+t.charAt(0)+t.charAt(1)+t.charAt(1)+t.charAt(2)+t.charAt(2));var n=new RegExp("[A-Za-z0-9]{2}","g"),r=e.match(n).map(p=>parseInt(p,16)),o=r[0],s=r[1],u=r[2],c=u===void 0?0:u,d=r[3];return{r:o,g:s,b:c,a:(d??255)/ru}},K1=e=>{var t=e.h,n=e.s,r=e.v,o=e.a,s=t/60,u=n/Jo,c=r/Jo,d=Math.floor(s)%6,p=s-Math.floor(s),m=ru*c*(1-u),g=ru*c*(1-u*p),y=ru*c*(1-u*(1-p));c*=ru;var A={};switch(d){case 0:A.r=c,A.g=y,A.b=m;break;case 1:A.r=g,A.g=c,A.b=m;break;case 2:A.r=m,A.g=c,A.b=y;break;case 3:A.r=m,A.g=g,A.b=c;break;case 4:A.r=y,A.g=m,A.b=c;break;case 5:A.r=c,A.g=m,A.b=g;break}return A.r=Math.round(A.r),A.g=Math.round(A.g),A.b=Math.round(A.b),qt({},A,{a:o})},_a=e=>oO(K1(e));function Jl(e,t){if(e==null)return{};var n={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(t.indexOf(r)!==-1)continue;n[r]=e[r]}return n}function q1(e){var t=C.useRef(e);return C.useEffect(()=>{t.current=e}),C.useCallback((n,r)=>t.current&&t.current(n,r),[])}var ec=e=>"touches"in e,Z1=e=>{!ec(e)&&e.preventDefault&&e.preventDefault()},W1=function(t,n,r){return n===void 0&&(n=0),r===void 0&&(r=1),t>r?r:t{var n=e.getBoundingClientRect(),r=ec(t)?t.touches[0]:t;return{left:W1((r.pageX-(n.left+window.pageXOffset))/n.width),top:W1((r.pageY-(n.top+window.pageYOffset))/n.height),width:n.width,height:n.height,x:r.pageX-(n.left+window.pageXOffset),y:r.pageY-(n.top+window.pageYOffset)}},sO=["prefixCls","className","onMove","onDown"],og=Y.forwardRef((e,t)=>{var n=e.prefixCls,r=n===void 0?"w-color-interactive":n,o=e.className,s=e.onMove,u=e.onDown,c=Jl(e,sO),d=C.useRef(null),p=C.useRef(!1),m=C.useState(!1),g=m[0],y=m[1],A=q1(s),w=q1(u),b=R=>p.current&&!ec(R)?!1:(p.current=ec(R),!0),x=C.useCallback(R=>{if(Z1(R),!!d.current){var k=ec(R)?R.touches.length>0:R.buttons>0;if(!k){y(!1);return}A?.(X1(d.current,R),R)}},[A]),E=C.useCallback(()=>y(!1),[]),S=C.useCallback(R=>{R?(window.addEventListener(p.current?"touchmove":"mousemove",x),window.addEventListener(p.current?"touchend":"mouseup",E)):(window.removeEventListener("mousemove",x),window.removeEventListener("mouseup",E),window.removeEventListener("touchmove",x),window.removeEventListener("touchend",E))},[x,E]);C.useEffect(()=>(S(g),()=>{S(!1)}),[g,x,E,S]);var F=C.useCallback(R=>{var k=document.activeElement;k?.blur(),Z1(R.nativeEvent),b(R.nativeEvent)&&d.current&&(w?.(X1(d.current,R.nativeEvent),R.nativeEvent),y(!0))},[w]);return f.jsx("div",qt({},c,{className:[r,o||""].filter(Boolean).join(" "),style:qt({},c.style,{touchAction:"none"}),ref:d,tabIndex:0,onMouseDown:F,onTouchStart:F}))});og.displayName="Interactive";var uO=["className","prefixCls","left","top","style","fillProps"],lO=e=>{var t=e.className,n=e.prefixCls,r=e.left,o=e.top,s=e.style,u=e.fillProps,c=Jl(e,uO),d=qt({},s,{position:"absolute",left:r,top:o}),p=qt({width:18,height:18,boxShadow:"var(--alpha-pointer-box-shadow)",borderRadius:"50%",backgroundColor:"var(--alpha-pointer-background-color)"},u?.style,{transform:r?"translate(-9px, -1px)":"translate(-1px, -9px)"});return f.jsx("div",qt({className:n+"-pointer "+(t||""),style:d},c,{children:f.jsx("div",qt({className:n+"-fill"},u,{style:p}))}))},cO=["prefixCls","className","hsva","background","bgProps","innerProps","pointerProps","radius","width","height","direction","reverse","style","onChange","pointer"],dO="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAMUlEQVQ4T2NkYGAQYcAP3uCTZhw1gGGYhAGBZIA/nYDCgBDAm9BGDWAAJyRCgLaBCAAgXwixzAS0pgAAAABJRU5ErkJggg==",ig=Y.forwardRef((e,t)=>{var n=e.prefixCls,r=n===void 0?"w-color-alpha":n,o=e.className,s=e.hsva,u=e.background,c=e.bgProps,d=c===void 0?{}:c,p=e.innerProps,m=p===void 0?{}:p,g=e.pointerProps,y=g===void 0?{}:g,A=e.radius,w=A===void 0?0:A,b=e.width,x=e.height,E=x===void 0?16:x,S=e.direction,F=S===void 0?"horizontal":S,R=e.reverse,k=R===void 0?!1:R,B=e.style,N=e.onChange,P=e.pointer,U=Jl(e,cO),Q=C.useCallback(O=>{var T=F==="horizontal"?O.left:O.top;return F==="horizontal"?k?1-T:T:k?T:1-T},[F,k]),$=C.useCallback(O=>F==="horizontal"?k?1-O:O:k?O:1-O,[F,k]),q=O=>{var T=Q(O);N&&N(qt({},s,{a:T}),O)},V=Y1(Object.assign({},s,{a:1})),W=k?"linear-gradient(to right, "+V+" 0%, rgba(244, 67, 54, 0) 100%)":"linear-gradient(to right, rgba(244, 67, 54, 0) 0%, "+V+" 100%)",ae=k?"linear-gradient(to bottom, rgba(244, 67, 54, 0) 0%, "+V+" 100%)":"linear-gradient(to bottom, "+V+" 0%, rgba(244, 67, 54, 0) 100%)",j=F==="horizontal"?W:ae,G={};F==="horizontal"?G.left=$(s.a)*100+"%":G.top=$(s.a)*100+"%";var te=qt({"--alpha-background-color":"#fff","--alpha-pointer-background-color":"rgb(248, 248, 248)","--alpha-pointer-box-shadow":"rgb(0 0 0 / 37%) 0px 1px 4px 0px",borderRadius:w,background:"url("+dO+") left center",backgroundColor:"var(--alpha-background-color)"},{width:b,height:E},B,{position:"relative"}),ue=C.useCallback(O=>{var T=.01,J=s.a,le=J;switch(O.key){case"ArrowLeft":F==="horizontal"&&(le=k?Math.min(1,J+T):Math.max(0,J-T),O.preventDefault());break;case"ArrowRight":F==="horizontal"&&(le=k?Math.max(0,J-T):Math.min(1,J+T),O.preventDefault());break;case"ArrowUp":F==="vertical"&&(le=k?Math.max(0,J-T):Math.min(1,J+T),O.preventDefault());break;case"ArrowDown":F==="vertical"&&(le=k?Math.min(1,J+T):Math.max(0,J-T),O.preventDefault());break;default:return}if(le!==J){var me=$(le),de={left:F==="horizontal"?me:s.a,top:F==="vertical"?me:s.a,width:0,height:0,x:0,y:0};N&&N(qt({},s,{a:le}),de)}},[$,s,F,N,k]),ie=C.useCallback(O=>{O.target.focus()},[]),z=P&&typeof P=="function"?P(qt({prefixCls:r},y,G)):f.jsx(lO,qt({},y,{prefixCls:r},G));return f.jsxs("div",qt({},U,{className:[r,r+"-"+F,o||""].filter(Boolean).join(" "),style:te,ref:t,children:[f.jsx("div",qt({},d,{style:qt({inset:0,position:"absolute",background:u||j,borderRadius:w},d.style)})),f.jsx(og,qt({},m,{style:qt({},m.style,{inset:0,zIndex:1,position:"absolute",outline:"none"}),onMove:q,onDown:q,onClick:ie,onKeyDown:ue,children:z}))]}))});ig.displayName="Alpha";var fO=e=>{var t=e.className,n=e.color,r=e.left,o=e.top,s=e.prefixCls,u={position:"absolute",top:o,left:r},c={"--saturation-pointer-box-shadow":"rgb(255 255 255) 0px 0px 0px 1.5px, rgb(0 0 0 / 30%) 0px 0px 1px 1px inset, rgb(0 0 0 / 40%) 0px 0px 1px 2px",width:6,height:6,transform:"translate(-3px, -3px)",boxShadow:"var(--saturation-pointer-box-shadow)",borderRadius:"50%",backgroundColor:n};return C.useMemo(()=>f.jsx("div",{className:s+"-pointer "+(t||""),style:u,children:f.jsx("div",{className:s+"-fill",style:c})}),[o,r,n,t,s])},hO=["prefixCls","radius","pointer","className","hue","style","hsva","onChange"],$1=Y.forwardRef((e,t)=>{var n,r=e.prefixCls,o=r===void 0?"w-color-saturation":r,s=e.radius,u=s===void 0?0:s,c=e.pointer,d=e.className,p=e.hue,m=p===void 0?0:p,g=e.style,y=e.hsva,A=e.onChange,w=Jl(e,hO),b=qt({width:200,height:200,borderRadius:u},g,{position:"relative"}),x=C.useRef(null),E=C.useCallback(B=>{x.current=B,typeof t=="function"?t(B):t&&"current"in t&&(t.current=B)},[t]),S=C.useCallback((B,N)=>{A&&y&&A({h:y.h,s:B.left*100,v:(1-B.top)*100,a:y.a});var P=x.current;P&&P.focus()},[y,A]),F=C.useCallback(B=>{if(!(!y||!A)){var N=1,P=y.s,U=y.v,Q=!1;switch(B.key){case"ArrowLeft":P=Math.max(0,y.s-N),Q=!0,B.preventDefault();break;case"ArrowRight":P=Math.min(100,y.s+N),Q=!0,B.preventDefault();break;case"ArrowUp":U=Math.min(100,y.v+N),Q=!0,B.preventDefault();break;case"ArrowDown":U=Math.max(0,y.v-N),Q=!0,B.preventDefault();break;default:return}Q&&A({h:y.h,s:P,v:U,a:y.a})}},[y,A]),R=C.useMemo(()=>{if(!y)return null;var B={top:100-y.v+"%",left:y.s+"%",color:Y1(y)};return c&&typeof c=="function"?c(qt({prefixCls:o},B)):f.jsx(fO,qt({prefixCls:o},B))},[y,c,o]),k=C.useCallback(B=>{B.target.focus()},[]);return f.jsx(og,qt({className:[o,d||""].filter(Boolean).join(" ")},w,{style:qt({position:"absolute",inset:0,cursor:"crosshair",backgroundImage:"linear-gradient(0deg, #000, transparent), linear-gradient(90deg, #fff, hsl("+((n=y?.h)!=null?n:m)+", 100%, 50%))"},b,{outline:"none"}),ref:E,onMove:S,onDown:S,onKeyDown:F,onClick:k,children:R}))});$1.displayName="Saturation";var mO=["prefixCls","className","hue","onChange","direction","reverse"],J1="rgb(255, 0, 0) 0%, rgb(255, 255, 0) 17%, rgb(0, 255, 0) 33%, rgb(0, 255, 255) 50%, rgb(0, 0, 255) 67%, rgb(255, 0, 255) 83%, rgb(255, 0, 0) 100%",eE="rgb(255, 0, 0) 0%, rgb(255, 0, 255) 17%, rgb(0, 0, 255) 33%, rgb(0, 255, 255) 50%, rgb(0, 255, 0) 67%, rgb(255, 255, 0) 83%, rgb(255, 0, 0) 100%",tE=Y.forwardRef((e,t)=>{var n=e.prefixCls,r=n===void 0?"w-color-hue":n,o=e.className,s=e.hue,u=s===void 0?0:s,c=e.onChange,d=e.direction,p=d===void 0?"horizontal":d,m=e.reverse,g=m===void 0?!1:m,y=Jl(e,mO),A=C.useCallback(()=>{if(p==="horizontal"){var x=g?eE:J1,E="right";return"linear-gradient(to "+E+", "+x+")"}else{var S=g?J1:eE,F="bottom";return"linear-gradient(to "+F+", "+S+")"}},[p,g]),w=C.useCallback(x=>{var E=p==="horizontal"?x.left:x.top,S;return p==="horizontal"?S=g?1-E:E:S=g?E:1-E,360*S},[p,g]),b=C.useMemo(()=>A(),[A]);return f.jsx(ig,qt({ref:t,className:r+" "+(o||"")},y,{direction:p,reverse:g,background:b,hsva:{h:u,s:100,v:100,a:u/360},onChange:(x,E)=>{c&&c({h:w(E)})}}))});tE.displayName="Hue";var nE=Oo("focus-visible:ring-ring aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive theme-default:active:scale-[0.99] relative box-border inline-flex shrink-0 items-center justify-center gap-2 overflow-hidden text-sm font-medium whitespace-nowrap transition-all duration-150 ease-in-out outline-none focus-visible:ring-4 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{primary:"shadow-button-resting hover:shadow-button-hover hover:border-primary/50 border-primary bg-primary text-primary-foreground hover:bg-primary/90 theme-default:before:from-primary-foreground/0 theme-default:before:to-primary-foreground/15 theme-default:before:absolute theme-default:before:top-0 theme-default:before:left-0 theme-default:before:block theme-default:before:h-full theme-default:before:w-full theme-default:before:bg-gradient-to-t theme-default:before:content-[''] border",outline:"dark:bg-muted/50 hover:text-accent-foreground shadow-button-outlined-resting hover:shadow-button-outlined-hover hover:border-accent bg-background hover:bg-muted text-primary border-primary/35 theme-default:before:from-primary/5 theme-default:before:to-primary/0 theme-default:before:absolute theme-default:before:top-0 theme-default:before:left-0 theme-default:before:block theme-default:before:h-full theme-default:before:w-full theme-default:before:bg-gradient-to-t theme-default:before:content-[''] border",ghost:"hover:bg-muted text-primary bg-transparent",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90 shadow-button-destructive-resting hover:shadow-button-destructive-hover border-destructive-border/25 hover:border-destructive-border/50 theme-default:before:to-primary-foreground/50 theme-default:before:absolute theme-default:before:top-0 theme-default:before:left-0 theme-default:before:block theme-default:before:h-full theme-default:before:w-full theme-default:before:bg-gradient-to-t theme-default:before:content-[''] theme-default:border",link:"text-foreground underline-offset-4 hover:underline"},size:{default:"h-10 rounded-2xl px-4 py-2.5 has-[>svg]:px-3",xs:"h-7 rounded-md px-2 py-1.5 text-xs has-[>svg]:px-2",sm:"h-8 gap-1.5 rounded-xl px-3 py-2 text-xs has-[>svg]:px-2.5",lg:"h-12 rounded-3xl px-6 py-3 text-base has-[>svg]:px-4",icon:"size-7 rounded-xl"}},defaultVariants:{variant:"primary",size:"default"}});function Je({className:e,variant:t,size:n,as:r,...o}){return f.jsx(r?fm:"button",{className:X(nE({variant:t,size:n}),e),...o})}function Bf({...e}){return f.jsx(lM,{"data-slot":"dialog",...e})}function pO({...e}){let t=Os();return f.jsx(cM,{container:t,"data-slot":"dialog-portal",...e})}function gO({className:e,...t}){return f.jsx(dM,{"data-slot":"dialog-overlay",className:X("data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50 bg-black/50 duration-200 ease-in-out",e),...t})}function kf({className:e,children:t,showCloseButton:n=!0,...r}){return f.jsxs(pO,{"data-slot":"dialog-portal",children:[f.jsx(gO,{}),f.jsxs(fM,{"data-slot":"dialog-content",className:X("bg-background data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 shadow-bevel-2xl rounded-5xl fixed top-[50%] left-[50%] z-[999] grid w-full translate-x-[-50%] translate-y-[-50%] gap-4 p-6 duration-200 ease-in-out sm:max-w-lg",e),...r,children:[t,n&&f.jsx(pM,{asChild:!0,"data-slot":"dialog-close",className:"ring-offset-background absolute top-4 right-4",children:f.jsxs(Je,{variant:"ghost",size:"icon",children:[f.jsx(_b,{}),f.jsx("span",{className:"sr-only",children:"Close"})]})})]})]})}function Mf({className:e,...t}){return f.jsx("div",{"data-slot":"dialog-header",className:X("flex flex-col gap-2 text-center sm:text-left",e),...t})}function rE({className:e,...t}){return f.jsx("div",{"data-slot":"dialog-footer",className:X("flex flex-row gap-2 justify-end",e),...t})}function Nf({className:e,...t}){return f.jsx(hM,{"data-slot":"dialog-title",className:X("text-lg text-primary leading-none font-semibold",e),...t})}function aE({className:e,...t}){return f.jsx(mM,{"data-slot":"dialog-description",className:X("text-muted-foreground text-sm",e),...t})}function ou({className:e,orientation:t="horizontal",decorative:n=!0,...r}){return f.jsx("div",{"data-slot":"separator","data-orientation":t,role:n?"none":"separator",className:X("bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-px",e),...r})}function Se(e,t){let{coreClient:n}=Un();if(!n)throw new Error("useTranslator must be used within Auth0ComponentProvider with initialized CoreClient");let r=C.useMemo(()=>n.i18nService.translator(e,t),[n,e,t]),o=C.useCallback(async(s,u)=>{await n.i18nService.changeLanguage(s,u)},[n]);return{t:r,changeLanguage:o,currentLanguage:n.i18nService.currentLanguage,fallbackLanguage:n.i18nService.fallbackLanguage}}function vO({open:e,onOpenChange:t,factorToDelete:n,isDeletingFactor:r,onConfirm:o,onCancel:s,styling:u={variables:{common:{},light:{},dark:{}},classes:{}},customMessages:c={}}){let{t:d}=Se("mfa",c),{isDarkMode:p}=en(),m=C.useMemo(()=>cn(u,p),[u,p]);return f.jsx(Bf,{open:e,onOpenChange:t,children:f.jsxs(kf,{style:m?.variables,className:X("w-[400px] max-h-[90vh]",m.classes?.["DeleteFactorConfirmation-dialogContent"]),children:[f.jsxs(Mf,{children:[f.jsx(Nf,{className:"text-center text-(length:--font-size-title) font-medium",children:d("delete_mfa_title")}),f.jsx(ou,{className:"my-2"})]}),f.jsxs("div",{className:"flex flex-col items-center mt-6",children:[f.jsx("p",{className:X("text-center text-(length:--font-size-paragraph) font-normal mb-10 text-primary"),children:d(`delete_mfa_${n?.type}_consent`)}),f.jsxs("div",{className:"flex flex-row justify-end gap-3 w-full mt-6 mb-6",children:[f.jsx(Je,{variant:"outline",size:"default",className:"text-sm",onClick:s,disabled:r,"aria-label":d("cancel"),children:d("cancel")}),f.jsx(Je,{variant:"destructive",size:"default",className:"text-sm",onClick:()=>n&&o(n.id),disabled:r,"aria-label":d("confirm"),children:d(r?"deleting":"confirm")})]})]})]})})}function AO({message:e,className:t}){return f.jsx("p",{className:X("text-sm text-(length:--font-size-paragraph) text-center text-muted-foreground",t),children:e})}function yO({title:e,description:t,className:n}){return f.jsxs("div",{className:X("flex flex-col items-center justify-center p-4 space-y-2",n),role:"alert","aria-live":"assertive",children:[f.jsx("h1",{className:"text-base font-medium text-center text-destructive-foreground",id:"mfa-error-title",children:e}),f.jsx("p",{className:"text-sm text-center text-destructive-foreground whitespace-pre-line",children:t})]})}function Sr({className:e,...t}){return f.jsx("div",{"data-slot":"card",className:X("bg-card text-card-foreground shadow-bevel-2xl flex flex-col gap-6 rounded-4xl py-6",e),...t})}function sg({className:e,...t}){return f.jsx("div",{"data-slot":"card-header",className:X("@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6",e),...t})}function iu({className:e,...t}){return f.jsx("div",{"data-slot":"card-title",className:X("leading-none font-semibold",e),...t})}function su({className:e,...t}){return f.jsx("div",{"data-slot":"card-description",className:X("text-muted-foreground text-sm",e),...t})}function oE({className:e,...t}){return f.jsx("div",{"data-slot":"card-action",className:X("col-start-2 row-span-2 row-start-1 self-start justify-self-end",e),...t})}function Va({className:e,...t}){return f.jsx("div",{"data-slot":"card-content",className:X("px-6",e),...t})}function bO({className:e,...t}){return f.jsx("div",{"data-slot":"card-footer",className:X("flex items-center px-6 [.border-t]:pt-6",e),...t})}function iE({...e}){return f.jsx(LN,{"data-slot":"popover",...e})}function sE({...e}){return f.jsx(ON,{"data-slot":"popover-trigger",...e,asChild:!0})}function uE({className:e,align:t="center",sideOffset:n=4,...r}){let o=Os();return f.jsx(IN,{container:o,children:f.jsx(UN,{"data-slot":"popover-content",align:t,sideOffset:n,className:X("bg-popover text-popover-foreground animate-in fade-in-0 zoom-in-95 shadow-bevel-xl data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 w-72 origin-(--radix-popover-content-transform-origin) overflow-hidden rounded-3xl ring-0 outline-hidden duration-150 ease-in-out outline-none focus:outline-none",e),...r})})}var xO={[js]:xb,[rr]:yb};function _O({factors:e,factorType:t,readOnly:n,isEnabledFactor:r,onDeleteFactor:o,isDeletingFactor:s,disableDelete:u,styling:c={variables:{common:{},light:{},dark:{}},classes:{}},customMessages:d={}}){let{t:p}=Se("mfa",d),{isDarkMode:m}=en(),g=xO[t],y=C.useMemo(()=>cn(c,m),[c,m]);return f.jsx("div",{className:"space-y-2 mt-2",style:y?.variables,children:e.map(A=>f.jsx(Sr,{className:"border border-[color:var(--color-border)] rounded-lg shadow-none bg-transparent p-0 w-full","aria-label":p(`${t}.title`),children:f.jsxs(Va,{className:"flex flex-row items-center justify-between gap-3 p-3",children:[f.jsxs("div",{className:"flex items-center gap-3 min-w-0 flex-grow",children:[g&&f.jsx(g,{className:"w-5 h-5 text-muted-foreground shrink-0","aria-hidden":"true"}),f.jsx("span",{className:X("font-medium text-base text-(length:--font-size-body) text-foreground truncate"),title:A.name||A.id,children:A.name||A.id})]}),!n&&f.jsx("div",{className:"shrink-0",children:f.jsxs(iE,{children:[f.jsx(sE,{asChild:!0,children:f.jsx(Je,{variant:"ghost",size:"icon","aria-label":p("actions"),className:"p-2",tabIndex:0,children:f.jsx(MB,{className:"w-5 h-5","aria-hidden":"true"})})}),f.jsx(uE,{className:"w-30 p-2",role:"menu",children:f.jsxs(Je,{size:"sm",variant:"ghost",className:"flex items-center justify-center px-4 py-2 gap-2 text-red-600 font-normal text-sm w-full",onClick:()=>o(A.id,t),disabled:u||s||!r,"aria-label":p("remove"),role:"menuitem",children:[f.jsx(wl,{className:"w-4 h-4 color-red-10","aria-hidden":"true"}),f.jsx("span",{className:"color-red-10",children:p("remove")})]})})]})})]})},A.id))})}var CO=({width:e=30,height:t=30,title:n="Apple logo",className:r,...o})=>f.jsx("img",{src:F7,alt:n,width:e,height:t,className:r,...o}),wO=Y.memo(CO),EO=({width:e=48,height:t=48,title:n="Google logo",className:r,...o})=>f.jsx("img",{src:R7,alt:n,width:e,height:t,className:r,...o}),lE=Y.memo(EO);function ea({children:e,className:t,...n}){return f.jsx("label",{className:X("flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50",t),...n,children:e})}var Dr=YN,cE=C.createContext({}),Ue=({...e})=>f.jsx(cE.Provider,{value:{name:e.name},children:f.jsx(GN,{...e,render:({field:t,fieldState:n,formState:r})=>{let{onChange:o,onBlur:s,...u}=t;return e.render({field:{...u,onChange:(...c)=>{o(...c)},onBlur:(...c)=>{s(...c)}},fieldState:n,formState:r})}})}),Tf=()=>{let e=C.useContext(cE),t=C.useContext(dE),{getFieldState:n}=p_(),r=m_({name:e.name}),o=n(e.name,r);if(!e)throw new Error("useFormField should be used within ");let{id:s}=t;return{id:s,name:e.name,formItemId:`${s}-form-item`,formDescriptionId:`${s}-form-item-description`,formMessageId:`${s}-form-item-message`,...o}},dE=C.createContext({});function Ve({className:e,...t}){let n=C.useId();return f.jsx(dE.Provider,{value:{id:n},children:f.jsx("div",{"data-slot":"form-item",className:X("grid gap-2",e),...t})})}function He({className:e,...t}){let{error:n,formItemId:r}=Tf();return f.jsx(ea,{"data-slot":"form-label","data-error":!!n,className:X("data-[error=true]:text-destructive-foreground",e),htmlFor:r,...t})}function Qe({...e}){let{error:t,formItemId:n,formDescriptionId:r,formMessageId:o}=Tf();return f.jsx(fm,{"data-slot":"form-control",id:n,"aria-describedby":t?`${r} ${o}`:`${r}`,"aria-invalid":!!t,...e})}function vt({className:e,...t}){let{formDescriptionId:n}=Tf();return f.jsx("p",{"data-slot":"form-description",id:n,className:X("text-muted-foreground text-sm",e),...t})}function We({className:e,...t}){let{error:n,formMessageId:r}=Tf(),o=n?String(n?.message??""):t.children;return o?f.jsx("p",{"data-slot":"form-message",id:r,className:X("text-destructive-foreground text-sm",e),...t,children:o}):null}var SO=Oo("bg-input aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive relative box-border inline-flex w-full shrink-0 cursor-text items-center justify-center gap-2 overflow-hidden rounded-2xl text-sm transition-[color,box-shadow] duration-150 ease-in-out outline-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"border-border/50 text-input-foreground shadow-input-resting hover:shadow-input-hover hover:border-primary/25 focus-within:border-border focus-within:ring-primary/15 focus-within:ring-4",error:"border-destructive-border/50 text-destructive-foreground shadow-input-destructive-resting hover:shadow-input-destructive-hover hover:border-destructive-border/25 focus-within:ring-destructive-border/15 focus-within:ring-4"},size:{default:"h-10",sm:"h-9",lg:"h-11"}},defaultVariants:{variant:"default",size:"default"}}),Zt=C.forwardRef(({className:e,variant:t,size:n,error:r,helperText:o,startAdornment:s,endAdornment:u,...c},d)=>{let p=c.disabled,m=c.id?"div":"label";return f.jsxs("div",{className:"flex w-full flex-col",children:[f.jsxs(m,{className:X(SO({variant:r?"error":t,size:n}),"group items-center gap-0.5",p&&"bg-input-muted text-input-muted-foreground cursor-not-allowed opacity-50",p&&t==="default"&&"bg-input-muted",s&&"pl-[5px]",u&&"pr-[5px]",e),children:[s&&f.jsx("div",{className:"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:s}),f.jsx("input",{className:X("w-full flex-1 bg-transparent px-3 py-2 outline-none file:border-0 file:bg-transparent file:text-sm file:font-medium",p&&"bg-input-muted text-input-muted-foreground cursor-not-allowed opacity-50",s&&"pl-0",u&&"pr-0",n==="default"&&"h-10",n==="sm"&&"h-9",n==="lg"&&"h-11"),ref:d,...c}),u&&f.jsx("div",{className:"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",children:u})]}),o&&f.jsx("p",{className:X("mt-1.5 px-2 text-xs",r?"text-destructive-foreground":"text-muted-foreground"),children:o})]})});Zt.displayName="TextField";function DO({length:e=6,placeholder:t,disabled:n,className:r,onChange:o,autoSubmit:s,separator:u,id:c,value:d,name:p,inputRef:m}){let[g,y]=C.useState(new Array(e).fill("")),A=C.useRef([]),w=d!==void 0,b=d||"",x=w?Array.from({length:e},(k,B)=>b[B]||""):g,E=k=>{w||y(k)},S=(k,B)=>{let N=k.value;if(isNaN(Number(N)))return;let P=[...x];P[B]=N.substring(N.length-1),E(P);let U=P.join("");o?.(U),U.length===e&&s&&s(U),N&&B{if((k.key==="Delete"||k.key==="Backspace")&&(k.ctrlKey||k.metaKey)){k.preventDefault();let N=new Array(e).fill("");E(N),o?.(""),A.current[0]?.focus();return}if(k.key==="ArrowLeft"){k.preventDefault(),B>0&&A.current[B-1]?.focus();return}if(k.key==="ArrowRight"){k.preventDefault(),B0){let N=[...x];N[B-1]="",E(N),o?.(N.join("")),A.current[B-1]?.focus()}return}if(k.key==="Delete"){if(x[B]){let N=[...x];N[B]="",E(N),o?.(N.join(""))}else if(BU>B&&!P);N!==-1?A.current[N]?.focus():B{k.preventDefault();let N=k.clipboardData.getData("text").replace(/[^0-9]/g,"");if(!N)return;let P=[...x],U=e-B,Q=N.slice(0,U);for(let V=B;V{A.current[q]?.focus()},0)};return f.jsx("div",{className:X("flex w-full items-center gap-2",r),children:x.map((k,B)=>f.jsxs(Y.Fragment,{children:[f.jsx(Zt,{ref:N=>{A.current[B]=N,B===0&&m&&(typeof m=="function"?m(N):m.current=N)},type:"text",inputMode:"numeric",maxLength:1,value:k,placeholder:t,disabled:n,className:"flex-1 text-xl font-semibold *:text-center has-[input]:text-center",onChange:N=>S(N.target,B),onKeyDown:N=>F(N,B),onPaste:N=>R(N,B),id:B===0?c:void 0,name:B===0?p:void 0}),u?.afterEvery&&(B+1)%u.afterEvery===0&&B{if(!d){p(!0);try{let g={userOtpCode:m.userOtp};await r(e,t,n,g)&&(s(),u())}catch(g){let y=hd(g,{resolver:A=>c(`errors.${e}.${A}`,{},"An unexpected error occurred during enrollment.")});o(y,RO)}finally{p(!1)}}},[d,e,r,o,s,u,c]),loading:d}}var Fr="onTouched",fo="onChange",kO=(e,t)=>{if(!e)return"";if(t===rr){let[n,r]=e.split("@");return!r||!n||n.length<=2?e:`${n.slice(0,2)}${"*".repeat(n.length-2)}@${r}`}return e.length>6?`${e.slice(0,3)}${"*".repeat(e.length-6)}${e.slice(-3)}`:e};function hE({factorType:e,confirmEnrollment:t,onError:n,onSuccess:r,onClose:o,contact:s,authSession:u,authenticationMethodId:c,onBack:d,styling:p={variables:{common:{},light:{},dark:{}},classes:{}},customMessages:m={}}){let{t:g}=Se("mfa",m),{isDarkMode:y}=en(),A=C.useMemo(()=>cn(p,y),[p,y]),{onSubmitOtp:w,loading:b}=dg({factorType:e,authSession:u,authenticationMethodId:c,confirmEnrollment:t,onError:n,onSuccess:r,onClose:o}),x=Cr({mode:Fr}),E=x.watch("userOtp"),S=C.useRef(null);C.useEffect(()=>{S.current?.focus()},[]);let F=async B=>{await w(B)},R=C.useMemo(()=>s?kO(s,e):"",[s,e]),k=g(b?"enrollment_form.show_otp.verifying":"submit");return f.jsx("div",{style:A.variables,className:"w-full max-w-sm mx-auto text-center",children:f.jsx(Dr,{...x,children:f.jsxs("form",{onSubmit:x.handleSubmit(F),autoComplete:"off",className:"space-y-6","aria-describedby":"otp-description",children:[f.jsx("p",{id:"otp-description",className:X("text-sm text-primary font-normal text-center","text-(length:--font-size-paragraph)"),children:[Ps,zs].includes(e)?g("enrollment_form.show_otp.enter_opt_code"):g("enrollment_form.show_otp.enter_verify_code",{verifier:R})}),f.jsx(Ue,{control:x.control,name:"userOtp",render:({field:B})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",htmlFor:"otp-input",children:g("enrollment_form.show_otp.one_time_passcode")}),f.jsx(Qe,{children:f.jsx(DO,{id:"otp-input",length:6,separator:{character:"-",afterEvery:3},onChange:B.onChange,inputRef:S,"aria-invalid":!!x.formState.errors.userOtp,value:B.value||""})}),f.jsx(We,{className:"text-sm text-left text-(length:--font-size-paragraph)",id:"otp-error",role:"alert"})]})}),f.jsxs("div",{className:"flex flex-row justify-end gap-3 mt-6 mb-6",children:[f.jsx(Je,{type:"button",className:"text-sm",variant:"outline",size:"default",onClick:d,"aria-label":g("back"),children:g("back")}),f.jsx(Je,{type:"submit",className:"text-sm",size:"default",disabled:E?.length!==6||b,"aria-label":k,children:k})]})]})})})}function mE({factorType:e,enrollMfa:t,onError:n}){let{t:r}=Se("mfa"),[o,s]=C.useState(!1),[u,c]=C.useState({contact:"",authSession:"",authenticationMethodId:""});return{onSubmitContact:C.useCallback(async d=>{if(!o){s(!0);try{let p=e===rr?{email:d.contact}:e===js?{phone_number:d.contact}:{},m=await t(e,p),g="id"in m?m.id:"";c({contact:d.contact,authenticationMethodId:g,authSession:m.auth_session})}catch(p){let m=hd(p,{resolver:g=>r(`errors.${e}.${g}`,{},"An unexpected error occurred during enrollment.")});n(m,jf)}finally{s(!1)}}},[o,e,t,n,r]),loading:o,contactData:u,setContactData:c}}function MO({factorType:e,enrollMfa:t,onError:n,confirmEnrollment:r,onSuccess:o,onClose:s,schema:u,styling:c={variables:{common:{},light:{},dark:{}},classes:{}},customMessages:d={}}){let[p,m]=C.useState(uu),{t:g}=Se("mfa",d),{isDarkMode:y}=en(),A=C.useMemo(()=>cn(c,y),[c,y]),{onSubmitContact:w,loading:b,contactData:x,setContactData:E}=mE({factorType:e,enrollMfa:t,onError:n}),S=C.useMemo(()=>e===rr?Py(g("errors.invalid_email"),u?.email):zy(g("errors.invalid_phone_number"),u?.phone),[e,g,u]),F=Cr({resolver:$r(S),mode:Fr,reValidateMode:fo,defaultValues:{contact:x.contact||""}}),R=()=>{F.reset(),E({contact:"",authSession:"",authenticationMethodId:""}),s?.()},k=C.useCallback(()=>{m(uu)},[p]),B=C.useCallback(async N=>{await w(N),m(FO)},[w]);return p===uu?f.jsx("div",{style:A?.variables,className:"w-full max-w-sm mx-auto",children:f.jsx("div",{className:"flex flex-col items-center justify-center flex-1 space-y-10",children:b?f.jsx("div",{className:"absolute inset-0 flex items-center justify-center",role:"status","aria-live":"polite",children:f.jsx(dn,{"aria-label":g("loading")})}):f.jsxs(f.Fragment,{children:[f.jsx("p",{className:X("text-center text-primary text-sm text-(length:--font-size-paragraph) font-normal"),id:"contact-description",children:g(e===rr?"enrollment_form.enroll_email_description":"enrollment_form.enroll_sms_description")}),f.jsx("div",{className:"w-full",children:f.jsx(Dr,{...F,children:f.jsxs("form",{onSubmit:F.handleSubmit(B),className:"space-y-6","aria-describedby":"contact-description",children:[f.jsx(Ue,{control:F.control,name:"contact",render:({field:N})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-left text-sm text-(length:--font-size-paragraph) font-medium",htmlFor:"contact-input",children:g(e===rr?"enrollment_form.email_address":"enrollment_form.phone_number")}),f.jsx(Qe,{children:f.jsx(Zt,{id:"contact-input",type:e===rr?"email":"tel",autoComplete:e===rr?"email":"tel",startAdornment:f.jsx("div",{className:"p-1.5","aria-hidden":"true",children:e===rr?f.jsx(yb,{}):f.jsx(xb,{})}),placeholder:g(e===rr?"enrollment_form.enroll_email_placeholder":"enrollment_form.enroll_sms_placeholder"),error:!!F.formState.errors.contact,"aria-invalid":!!F.formState.errors.contact,...N})}),f.jsx(We,{className:"text-left text-sm text-(length:--font-size-paragraph)",id:"contact-error",role:"alert"})]})}),f.jsxs("div",{className:"flex flex-row justify-end gap-3 mt-6 mb-6",children:[f.jsx(Je,{type:"button",className:"text-sm",variant:"outline",size:"default",onClick:R,"aria-label":g("cancel"),children:g("cancel")}),f.jsx(Je,{type:"submit",size:"default",className:"text-sm",disabled:!F.formState.isValid||b,"aria-label":g("submit"),children:g("submit")})]})]})})})]})})}):f.jsx(hE,{factorType:e,confirmEnrollment:r,onError:n,onSuccess:o,onClose:s,contact:x.contact,authSession:x.authSession,authenticationMethodId:x.authenticationMethodId,onBack:k,styling:c,customMessages:d})}var NO=Oo("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 shadow-bevel-lg z-50 w-fit rounded-xl px-2 py-1 text-sm text-balance",{variants:{position:{top:"origin-bottom",bottom:"origin-top",left:"origin-left",right:"origin-right"}},defaultVariants:{position:"top"}});function Ha({children:e,...t}){return f.jsx(MT,{children:f.jsx(NT,{...t,children:e})})}function Qa({asChild:e=!0,...t}){return f.jsx(TT,{asChild:e,...t})}var Ca=C.forwardRef(({className:e,side:t="top",position:n,sideOffset:r=8,children:o,...s},u)=>{let c=Os();return f.jsx(jT,{container:c,children:f.jsxs(rC,{ref:u,side:t,sideOffset:r,className:X(NO({position:n||t}),e),...s,children:[o,f.jsx(PT,{className:"fill-popover"})]})})});Ca.displayName=rC.displayName;var vn=C.forwardRef(({onCopy:e,copyButtonClassName:t,tooltipSide:n="top",tooltipAlign:r="end",readOnly:o=!0,endAdornment:s,showCopyButton:u=!0,...c},d)=>{let{t:p}=Se("common"),[m,g]=C.useState(p("copy")),[y,A]=C.useState(!1),w=async()=>{c.value&&(await navigator.clipboard.writeText(String(c.value)),g(p("copied")),A(!0),setTimeout(()=>{g(p("copy")),A(!1)},1e3),e?.())},b=f.jsxs(Ha,{open:y,onOpenChange:A,children:[f.jsx(Qa,{asChild:!0,children:f.jsx(Je,{type:"button",variant:"ghost",size:"icon",className:X("h-8 w-8",t),onClick:w,"aria-label":p("copy"),children:f.jsx(um,{className:"h-4 w-4","aria-hidden":"true"})})}),f.jsx(Ca,{side:n,align:r,sideOffset:5,className:"z-[1000]",children:m})]});return f.jsx(Zt,{ref:d,readOnly:o,...c,endAdornment:u?s?f.jsxs("div",{className:"flex items-center gap-1",children:[s,b]}):b:s})});vn.displayName="CopyableTextField";function TO({value:e,size:t=150,className:n,alt:r="QR Code",loadingMessage:o="Loading QR code",errorMessage:s="Failed to load QR code"}){let[u,c]=C.useState(null),[d,p]=C.useState(!1),[m,g]=C.useState(!0),{isDarkMode:y}=en(),A=C.useMemo(()=>({dark:y?"#FFFFFF":"#000000",light:y?"#000000":"#FFFFFF"}),[y]);C.useEffect(()=>{if(!e){c(null),p(!0),g(!1);return}let b=async()=>{try{let{toDataURL:x}=await Promise.resolve().then(()=>YV),E=await x(e,{width:t,margin:1,color:A});c(E),p(!1)}catch{c(null),p(!0)}finally{g(!1)}};g(!0),b()},[e,t,A]);let w={className:X("flex items-center justify-center rounded p-2","bg-gray-100 dark:bg-gray-800",d&&"text-gray-500 dark:text-gray-400 text-sm",n),style:{width:t,height:t}};return m?f.jsx("div",{...w,"aria-label":o,children:f.jsx(dn,{"aria-label":o})}):d||!u?f.jsx("div",{...w,role:"alert","aria-live":"assertive","aria-label":s,children:f.jsx("span",{children:s})}):f.jsx("img",{src:u,alt:r,width:t,height:t,className:X("block rounded",n),style:{imageRendering:"pixelated"}})}function pE({factorType:e,enrollMfa:t,onError:n,onClose:r}){let{t:o}=Se("mfa"),[s,u]=C.useState(!1),[c,d]=C.useState({authSession:"",barcodeUri:"",authenticationMethodId:""}),p=C.useCallback(async()=>{if(!s){u(!0);try{let g=await t(e,{});d({authSession:"auth_session"in g?g.auth_session:"",barcodeUri:"barcode_uri"in g?g.barcode_uri:"",authenticationMethodId:"id"in g?g.id:"",manualInputCode:"manual_input_code"in g?g.manual_input_code:""})}catch(g){let y=hd(g,{resolver:A=>o(`errors.${e}.${A}`,{},"An unexpected error occurred during enrollment.")});n(y,jf),r()}finally{u(!1)}}},[s,e,t,n,r,o]),m=C.useCallback(()=>{d({authSession:"",barcodeUri:"",authenticationMethodId:""}),u(!1)},[]);return{fetchOtpEnrollment:p,otpData:c,resetOtpData:m,loading:s}}function jO({factorType:e,enrollMfa:t,confirmEnrollment:n,onError:r,onSuccess:o,onClose:s,styling:u={variables:{common:{},light:{},dark:{}},classes:{}},customMessages:c={}}){let[d,p]=C.useState(lg),{t:m}=Se("mfa",c),{isDarkMode:g}=en(),y=C.useMemo(()=>cn(u,g),[u,g]),{fetchOtpEnrollment:A,otpData:w,resetOtpData:b,loading:x}=pE({factorType:e,enrollMfa:t,onError:r,onClose:s});C.useEffect(()=>{w?.barcodeUri||A()},[w?.barcodeUri,A]);let E=C.useCallback(async()=>{if(e===Ps)try{await n(e,w.authSession,w.authenticationMethodId,{}),o(),b(),s()}catch(F){r(F instanceof Error?F:new Error("Unknown error"),"confirm")}else p(BO)},[e,w,n,o,r,b,s]),S=C.useCallback(()=>{p(lg)},[]);return d===lg?f.jsx("div",{style:y.variables,className:"w-full",children:x?f.jsx("div",{className:"absolute inset-0 flex items-center justify-center",role:"status","aria-live":"polite",children:f.jsx(dn,{"aria-label":m("loading")})}):f.jsxs("div",{className:"w-full max-w-sm mx-auto text-center",children:[f.jsxs("div",{className:"mb-6",children:[f.jsx("div",{className:"flex justify-center items-center mb-6",children:f.jsx(TO,{size:150,value:w.barcodeUri,alt:m("enrollment_form.show_otp.qr_code_description")})}),f.jsx("p",{id:"qr-description",className:X("font-normal block text-sm text-center text-(length:--font-size-paragraph) text-primary"),children:m(e===zs?"enrollment_form.show_otp.title":"enrollment_form.show_auth0_guardian_title")})]}),f.jsxs("div",{"aria-describedby":"qr-description",children:[f.jsx(vn,{value:w.manualInputCode||w?.barcodeUri}),f.jsx("div",{className:"mt-3"}),f.jsxs("div",{className:"flex flex-row justify-end gap-3 mt-6 mb-6",children:[f.jsx(Je,{type:"button",className:"text-sm",variant:"outline",size:"default",onClick:s,"aria-label":m("cancel"),children:m("cancel")}),f.jsx(Je,{type:"button",className:"text-sm",size:"default",onClick:E,"aria-label":m("continue"),children:m("continue")})]})]})]})}):f.jsx(hE,{factorType:e,confirmEnrollment:n,onError:r,onSuccess:o,onClose:s,authSession:w.authSession,authenticationMethodId:w.authenticationMethodId,onBack:S,styling:u,customMessages:c})}function PO({factorType:e,confirmEnrollment:t,onError:n,onSuccess:r,onClose:o,userOtp:s,recoveryCode:u,authSession:c,authenticationMethodId:d,onBack:p,styling:m={variables:{common:{},light:{},dark:{}},classes:{}},loading:g=!1,customMessages:y={}}){let{t:A}=Se("mfa",y),{isDarkMode:w}=en(),b=C.useMemo(()=>cn(m,w),[m,w]),x=e===xl,{onSubmitOtp:E,loading:S}=dg({factorType:e,authSession:c,authenticationMethodId:d,confirmEnrollment:t,onError:n,onSuccess:r,onClose:o}),F=C.useCallback(async()=>{x?(await t(e,c,d,{}),r()):s&&await E({userOtp:s})},[x,E,s,r,c,e,t,d]),R=A(S?"enrollment_form.show_otp.verifying":"submit");return f.jsx("div",{style:b.variables,className:"w-full max-w-sm mx-auto text-center",children:g||S?f.jsx("div",{className:"flex items-center justify-center py-16",children:f.jsx(dn,{})}):f.jsxs("div",{className:"space-y-6",children:[f.jsxs("div",{children:[f.jsx("p",{className:X("font-normal block text-sm text-center mb-4 text-primary"),children:A("enrollment_form.recovery_code_description")}),u&&f.jsx(vn,{value:u})]}),f.jsxs("div",{className:"flex flex-row justify-end gap-3 mt-6 mb-6",children:[f.jsx(Je,{type:"button",className:"text-sm",variant:"outline",size:"default",onClick:p,"aria-label":A("back"),children:A("back")}),f.jsx(Je,{type:"button",className:"text-sm",size:"default",disabled:!x&&g,onClick:F,"aria-label":R,children:R})]})]})})}function gE({factorType:e,enrollMfa:t,onError:n,onClose:r}){let{t:o}=Se("mfa"),[s,u]=C.useState(!1),[c,d]=C.useState({recoveryCode:"",authSession:"",authenticationMethodId:""}),p=C.useCallback(async()=>{if(!s){u(!0);try{let g=await t(e,{});d({recoveryCode:"recovery_code"in g?g.recovery_code:"",authSession:"auth_session"in g?g.auth_session:"",authenticationMethodId:"id"in g?g.id:""})}catch(g){let y=hd(g,{resolver:A=>o(`errors.${e}.${A}`,{},"An unexpected error occurred during recovery code generation.")});n(y,jf),r()}finally{u(!1)}}},[s,e,t,n,r,o]),m=C.useCallback(()=>{d({recoveryCode:"",authSession:"",authenticationMethodId:""}),u(!1)},[]);return{fetchRecoveryCode:p,recoveryCodeData:c,resetRecoveryCodeData:m,loading:s}}function zO({open:e,onClose:t,factorType:n,enrollMfa:r,confirmEnrollment:o,onSuccess:s,onError:u,schema:c,styling:d={variables:{common:{},light:{},dark:{}},classes:{}},customMessages:p={}}){let{t:m}=Se("mfa",p),{isDarkMode:g}=en(),y=C.useMemo(()=>cn(d,g),[d,g]),[A,w]=C.useState(null),{fetchRecoveryCode:b,loading:x,recoveryCodeData:E,resetRecoveryCodeData:S}=gE({factorType:n,enrollMfa:r,onError:u,onClose:t});C.useEffect(()=>{e||w(null)},[e]),C.useEffect(()=>{if(!e)return;let k={[rr]:uu,[js]:uu,[Ps]:fE,[zs]:ug,[xl]:cg};w(k[n]??null)},[e,n]),C.useEffect(()=>{A===cg&&b()},[A]);let F=()=>f.jsx("div",{style:y?.variables,className:"w-full max-w-sm mx-auto",children:f.jsxs("div",{className:"flex flex-col items-center justify-center flex-1 space-y-10",children:[f.jsx("p",{className:X("text-center text-primary text-sm text-(length:--font-size-paragraph) font-normal"),children:m("enrollment_form.show_otp.install_guardian_description")}),f.jsxs("div",{className:"flex gap-4 w-full",children:[f.jsx("a",{href:"https://apps.apple.com/us/app/auth0-guardian/id1093447833",target:"_blank",rel:"noopener noreferrer",className:"flex-1",children:f.jsxs(Sr,{className:"flex flex-col items-center gap-1 min-w-24 p-6 h-full",children:[f.jsx(wO,{className:"w-8 h-8"}),f.jsx("span",{className:X("text-sm text-(length:--font-size-paragraph) text-center"),children:m("app-store")})]})}),f.jsx("a",{href:"https://play.google.com/store/apps/details?id=com.auth0.guardian",target:"_blank",rel:"noopener noreferrer",className:"flex-1",children:f.jsxs(Sr,{className:"flex flex-col items-center gap-1 min-w-24 p-6 h-full",children:[f.jsx(lE,{className:"w-8 h-8"}),f.jsx("span",{className:X("text-sm text-(length:--font-size-paragraph) text-center"),children:m("google-play")})]})})]}),f.jsxs("div",{className:"flex flex-row justify-end gap-3 w-full mt-6 mb-6",children:[f.jsx(Je,{type:"button",className:"text-sm",variant:"outline",size:"default",onClick:t,children:m("cancel")}),f.jsx(Je,{type:"button",className:"text-sm",size:"default",onClick:()=>w(ug),children:m("continue")})]})]})}),R=()=>{switch(A){case fE:return F();case uu:return f.jsx(MO,{factorType:n,enrollMfa:r,confirmEnrollment:o,onError:u,onSuccess:s,onClose:t,schema:c,styling:d,customMessages:p});case ug:return f.jsx(jO,{factorType:n,enrollMfa:r,confirmEnrollment:o,onError:u,onSuccess:s,onClose:t,styling:d,customMessages:p});case cg:return f.jsx(PO,{recoveryCode:E.recoveryCode,authSession:E.authSession,authenticationMethodId:E.authenticationMethodId,confirmEnrollment:o,onSuccess:()=>{s(),S()},onBack:()=>{S(),t()},styling:d,factorType:n,loading:x,customMessages:p});default:return null}};return f.jsx(Bf,{open:e&&!!A,onOpenChange:t,children:f.jsxs(kf,{style:y.variables,"aria-describedby":"mfa-setup-form",className:X("w-[400px] max-h-[90vh]",y.classes?.["UserMFASetupForm-dialogContent"]),children:[f.jsxs(Mf,{children:[f.jsx(Nf,{className:"text-left font-medium text-xl text-(length:--font-size-title)",children:m("enrollment_form.enroll_title")}),f.jsx(ou,{className:"my-2"})]}),R()]})})}var LO=Oo("theme-default:shadow-xs box-border inline-flex items-center overflow-clip rounded-2xl border border-transparent font-medium",{variants:{variant:{default:"bg-primary text-primary-foreground theme-default:border-primary",secondary:"bg-muted text-muted-foreground theme-default:border-muted-foreground/25",outline:"border-border",info:"bg-info text-info-foreground theme-default:border-info-foreground/25",success:"bg-success theme-default:border-success-foreground/25 text-success-foreground",warning:"bg-warning theme-default:border-warning-foreground/25 text-warning-foreground",destructive:"bg-destructive theme-default:border-destructive-foreground/25 text-destructive-foreground"},size:{sm:"px-1.5 py-0.5 text-xs",md:"px-2 py-1 text-sm",lg:"px-2.5 py-1.5 text-sm"}},defaultVariants:{variant:"default",size:"md"}});function Ji({className:e,variant:t,size:n,asChild:r=!1,...o}){return f.jsx(r?fm:"span",{"data-slot":"badge",className:X(LO({variant:t,size:n}),e),...o})}var vE=C.forwardRef(({className:e,children:t,icon:n,description:r,info:o,...s},u)=>f.jsxs("li",{ref:u,className:X("flex items-start gap-2",e),...s,children:[f.jsxs("div",{className:"flex min-w-0 gap-2 flex-1",children:[n&&f.jsx("div",{className:"text-muted-foreground mt-1 shrink-0",children:n}),f.jsxs("div",{className:"min-w-0 flex-1",children:[f.jsx("div",{className:"text-primary text-sm",children:t}),r&&f.jsx("p",{className:"text-muted-foreground text-sm",children:r})]})]}),o&&f.jsx("div",{className:"shrink-0",children:o})]}));vE.displayName="ListItem";var AE=C.forwardRef(({className:e,children:t,variant:n="plain",spacing:r="default",...o},s)=>f.jsx("ul",{ref:s,className:X("text-sm",r==="tight"&&"space-y-2",r==="default"&&"space-y-3",r==="relaxed"&&"space-y-4",n==="bullet"&&"list-inside list-disc",n==="number"&&"list-inside list-decimal",n==="plain"&&"divide-border list-none divide-y",e),...o,children:t}));AE.displayName="List";function yE(){let{coreClient:e}=Un();if(!e)throw new Error("useMFA must be used within Auth0ComponentProvider with initialized CoreClient");let t=C.useCallback(async(s=!1)=>{let u=e.getMyAccountApiClient(),[c,d]=await Promise.all([u.factors.list(),u.authenticationMethods.list()]);return Wh.fromAPI(c,d,s)},[e]),n=C.useCallback((s,u={})=>{let c=e.getMyAccountApiClient(),d=Wh.buildEnrollParams(s,u);return c.authenticationMethods.create(d)},[e]),r=C.useCallback(s=>e.getMyAccountApiClient().authenticationMethods.delete(s),[e]),o=C.useCallback((s,u,c,d)=>{let p=e.getMyAccountApiClient(),m=Wh.buildConfirmEnrollmentParams(s,u,d);return p.authenticationMethods.verify(c,m)},[e]);return{fetchFactors:t,enrollMfa:n,deleteMfa:r,confirmEnrollment:o}}function OO({readOnly:e,disableDelete:t,customMessages:n,factorConfig:r,fetchFactors:o,deleteMfa:s,showActiveOnly:u,onFetch:c,onEnroll:d,onDelete:p,onErrorAction:m,onBeforeAction:g}){let{t:y}=Se("mfa",n),[A,w]=C.useState({}),[b,x]=C.useState(!0),[E,S]=C.useState(null),[F,R]=C.useState(!1),[k,B]=C.useState(!1),[N,P]=C.useState(null),[U,Q]=C.useState(!1),[$,q]=C.useState(null),V=C.useCallback(async()=>{x(!0),S(null);try{let O=await o(u);w(O),c?.()}catch{S(y("errors.factors_loading_error"))}x(!1)},[o,u,c,m]),W=C.useMemo(()=>Object.keys(A).filter(O=>r?.[O]?.visible!==!1),[A,r]),ae=C.useMemo(()=>W.every(O=>!A[O]?.some(T=>T.enrolled)),[W,A]),j=O=>{P(O),B(!0)},G=C.useCallback(()=>{B(!1),N===Ps&&V(),P(null)},[N,V]),te=C.useCallback(async(O,T)=>{if(!(e||t))if(g){if(!await g("delete",T))return;await ue(O)}else q({id:O,type:T}),Q(!0)},[e,t,g]),ue=C.useCallback(async O=>{R(!0);let T=()=>{R(!1),Q(!1),q(null)};try{await s(O)}catch(J){let le=J instanceof Error?J:new Error(y("errors.delete_factor"));Io.error(y("errors.delete_factor")),m?.(le,"delete"),T();return}Io.success(y("remove_factor"),{duration:2e3,onAutoClose:()=>p?.()});try{await V()}catch(J){let le=J instanceof Error?J:new Error(y("errors.factors_loading_error"));m?.(le,"delete")}finally{T()}},[s,V,p,m,y]),ie=C.useCallback(async()=>{B(!1),P(null);try{Io.success(y("enroll_factor"),{duration:2e3,onAutoClose:()=>{d?.()}}),await V()}catch{Io.dismiss(),Io.error(y("errors.factors_loading_error"))}},[V,d,y]),z=C.useCallback((O,T)=>{Io.error(`${y(T===jf?"enrollment":"confirmation")} ${y("errors.failed",{message:O.message})}`),m?.(O,T)},[m,y]);return{factorsByType:A,loading:b,error:E,isDeletingFactor:F,dialogOpen:k,enrollFactor:N,isDeleteDialogOpen:U,factorToDelete:$,visibleFactorTypes:W,hasNoActiveFactors:ae,setIsDeleteDialogOpen:Q,setFactorToDelete:q,loadFactors:V,handleEnroll:j,handleCloseDialog:G,handleDeleteFactor:te,handleConfirmDelete:ue,handleEnrollSuccess:ie,handleEnrollError:z}}function IO(e){let{customMessages:t={},styling:n={variables:{common:{},light:{},dark:{}},classes:{}},hideHeader:r=!1,showActiveOnly:o=!1,disableEnroll:s=!1,disableDelete:u=!1,readOnly:c=!1,factorConfig:d={},onEnroll:p,onDelete:m,onFetch:g,onErrorAction:y,onBeforeAction:A,schema:w}=e,{fetchFactors:b,enrollMfa:x,deleteMfa:E,confirmEnrollment:S}=yE(),{factorsByType:F,loading:R,error:k,isDeletingFactor:B,dialogOpen:N,enrollFactor:P,isDeleteDialogOpen:U,factorToDelete:Q,visibleFactorTypes:$,hasNoActiveFactors:q,setIsDeleteDialogOpen:V,loadFactors:W,handleEnroll:ae,handleCloseDialog:j,handleDeleteFactor:G,handleConfirmDelete:te,handleEnrollSuccess:ue,handleEnrollError:ie}=OO({readOnly:c,customMessages:t,disableDelete:u,showActiveOnly:o,factorConfig:d,fetchFactors:b,deleteMfa:E,confirmEnrollment:S,onFetch:g,onEnroll:p,onDelete:m,onErrorAction:y,onBeforeAction:A});return C.useEffect(()=>{W()},[]),f.jsx(bE,{logic:{isLoading:R,isDeleting:B,styling:n,customMessages:t,hideHeader:r,showActiveOnly:o,disableEnroll:s,disableDelete:u,readOnly:c,factorConfig:d,error:k,schema:w,dialogOpen:N,enrollFactor:P,isDeleteDialogOpen:U,factorToDelete:Q,factorsByType:F,visibleFactorTypes:$,hasNoActiveFactors:q,confirmEnrollment:S},handlers:{enrollMfa:x,onEnrollFactor:ae,onDeleteFactor:G,handleCloseDialog:j,handleEnrollError:ie,handleEnrollSuccess:ue,handleConfirmDelete:te,setIsDeleteDialogOpen:V}})}function bE({logic:e,handlers:t}){let{isLoading:n,isDeleting:r,styling:o,customMessages:s,hideHeader:u,showActiveOnly:c,disableEnroll:d,disableDelete:p,readOnly:m,factorConfig:g,schema:y,error:A,dialogOpen:w,enrollFactor:b,isDeleteDialogOpen:x,factorToDelete:E,factorsByType:S,visibleFactorTypes:F,hasNoActiveFactors:R,confirmEnrollment:k}=e,{enrollMfa:B,onEnrollFactor:N,onDeleteFactor:P,handleCloseDialog:U,handleEnrollSuccess:Q,handleEnrollError:$,handleConfirmDelete:q,setIsDeleteDialogOpen:V}=t,{loader:W,isDarkMode:ae}=en(),{t:j}=Se("mfa",s),G=C.useMemo(()=>cn(o,ae),[o,ae]);return f.jsxs(ja,{style:G.variables,children:[n?f.jsx("div",{className:"flex items-center justify-center py-16",children:W||f.jsx(dn,{})}):f.jsx(Sr,{className:X("py-10 px-8 sm:py-8 sm:px-6",G.classes?.["UserMFAMgmt-card"]),children:f.jsx(Va,{children:A?f.jsx(yO,{title:j("component_error_title"),description:j("component_error_description")}):f.jsxs(f.Fragment,{children:[!u&&f.jsxs(f.Fragment,{children:[f.jsx(iu,{id:"mfa-management-title",className:"text-2xl text-(length:--font-size-heading) font-medium text-left",children:j("title")}),f.jsx(su,{id:"mfa-management-desc",className:"text-sm text-(length:--font-size-paragraph) text-muted-foreground text-left",children:j("description")})]}),c&&R?f.jsx(AO,{message:j("no_active_mfa")}):f.jsx(AE,{className:"flex flex-col gap-0 w-full","aria-labelledby":"mfa-management-title","aria-describedby":"mfa-management-desc",children:F.map(te=>{let ue=(S[te]||[]).filter(O=>O.enrolled),ie=g?.[te]?.enabled!==!1,z=ue.length>0;return f.jsxs(vE,{className:X("w-full p-0 m-0 py-6 gap-3",!ie&&"opacity-50 pointer-events-none"),"aria-disabled":!ie,tabIndex:0,"aria-label":j(`${te}.title`),children:[f.jsxs("div",{className:"flex flex-col sm:flex-row sm:items-center sm:justify-between gap-3 mb-3",children:[f.jsxs("div",{className:"flex flex-wrap items-center gap-2 sm:gap-3",children:[f.jsx("span",{className:X("break-words text-card-foreground whitespace-normal text-base text-(length:--font-size-body) font-medium"),id:`factor-title-${te}`,children:j(`${te}.title`)}),z&&f.jsx(Ji,{variant:"success",size:"sm",className:"shrink-0","aria-label":j("enabled"),children:j("enabled")})]}),!m&&f.jsx(Je,{size:"default",variant:"outline",className:"text-sm w-full sm:w-auto shrink-0",onClick:()=>N(te),disabled:d||!ie,"aria-label":j(`${te}.button-text`),"aria-describedby":`factor-title-${te}`,children:j(`${te}.button-text`)})]}),!z&&f.jsx("p",{className:X("font-normal text-sm text-(length:--font-size-paragraph) text-muted-foreground text-left break-words"),id:`factor-desc-${te}`,children:j(`${te}.description`)}),z&&f.jsx(_O,{factors:ue,factorType:te,readOnly:m,isEnabledFactor:ie,onDeleteFactor:P,isDeletingFactor:r,disableDelete:p,styling:o,customMessages:s})]},te)})})]})})}),b&&f.jsx(zO,{open:w,onClose:U,factorType:b,enrollMfa:B,confirmEnrollment:k,onSuccess:Q,onError:$,schema:y,styling:o,customMessages:s}),f.jsx(vO,{open:x,onOpenChange:te=>!r&&V(te),factorToDelete:E,isDeletingFactor:r,onConfirm:q,onCancel:()=>V(!1),styling:o,customMessages:s})]})}var UO=IO,VO={type:"submit",label:"Save",variant:"primary",onClick:()=>{}},HO={label:"Cancel",variant:"outline",onClick:()=>{}},Pf=({hasUnsavedChanges:e=!1,isLoading:t=!1,nextAction:n,previousAction:r,className:o,showPrevious:s=!0,showNext:u=!0,showUnsavedChanges:c=!0,align:d="right",unsavedChangesText:p="Unsaved changes"})=>{let m=C.useMemo(()=>({...VO,...n}),[n]),g=C.useMemo(()=>({...HO,...r}),[r]),y=C.useCallback(x=>{m.onClick(x.nativeEvent)},[m.onClick]),A=C.useCallback(x=>{g.onClick(x.nativeEvent)},[g.onClick]),w=c&&e,b=c?s&&e:s;return f.jsxs("div",{className:X("flex flex-row items-center gap-2 p-2",d==="right"?"justify-end":"justify-start",o),children:[w&&f.jsx("span",{className:"text-sm text-muted-foreground",children:p}),s&&f.jsx(Je,{type:"button",variant:g.variant,size:g.size,onClick:A,disabled:g.disabled||t||c&&!e,className:X("FormActions-previous",c&&!b&&"invisible"),"aria-hidden":c&&!b,tabIndex:b?0:-1,children:g.label}),u&&f.jsx(Je,{type:m.type,variant:m.variant,size:m.size,disabled:m.disabled||t,className:"FormActions-next min-w-17.5",...m.type!=="submit"&&{onClick:y},children:t?f.jsx(dn,{colorScheme:m.variant==="destructive"?"primary":"foreground",size:"sm","aria-hidden":"true"}):f.jsxs(f.Fragment,{children:[m.icon&&f.jsx("span",{className:"mr-2","aria-hidden":"true",children:m.icon}),m.label]})})]})},Ga=({open:e,onOpenChange:t,title:n,description:r,content:o,modalActions:s,className:u,showCloseButton:c})=>{let d=n||r,p={hasUnsavedChanges:!0,showPrevious:!0,showUnsavedChanges:!1,previousAction:{label:"Cancel",variant:"outline",onClick:()=>t(!1)},nextAction:{label:"Confirm",variant:"primary",onClick:()=>t(!1)},...s};return f.jsx(Bf,{open:e,onOpenChange:t,children:f.jsxs(kf,{className:u,showCloseButton:c,children:[d&&f.jsxs(Mf,{children:[n&&f.jsx(Nf,{children:n}),r&&f.jsx(aE,{children:r})]}),o&&f.jsx("div",{className:"py-4",children:o}),f.jsx(rE,{children:f.jsx(Pf,{...p})})]})})};Ga.displayName="Modal";function xE({translatorKey:e="domain_management.domain_create.modal",className:t,customMessages:n,isOpen:r,isLoading:o,schema:s,onClose:u,onCreate:c}){let{t:d}=Se(e,n),p=C.useMemo(()=>Qy(s,d("field.error")),[s,d]),m=Cr({resolver:$r(p),defaultValues:{domain_url:""},mode:Fr}),g=C.useCallback(async w=>{w.domain_url&&(await c(w.domain_url),m.reset())},[m,c]),y=C.useCallback(()=>{m.reset(),u()},[m,u]),A=C.useCallback(w=>{w.preventDefault(),m.handleSubmit(g)()},[m,g]);return f.jsx(Ga,{open:r,onOpenChange:w=>!w&&y(),className:X("p-10",t),title:d("title"),content:f.jsx("div",{children:f.jsx(Dr,{...m,children:f.jsx("form",{id:"domain-create-form",onSubmit:A,children:f.jsx(Ue,{control:m.control,name:"domain_url",render:({field:w})=>f.jsxs(Ve,{children:[f.jsx(He,{htmlFor:"domain-url",className:"text-sm text-(length:--font-size-label) font-medium",children:d("field.label")}),f.jsx(Qe,{children:f.jsx(Zt,{id:"domain-url",type:"text",placeholder:d("field.placeholder"),className:"mt-2",...w})}),f.jsx(We,{})]})})})})}),modalActions:{isLoading:o,nextAction:{type:"button",label:d("actions.create_button_text"),variant:"primary",disabled:o,onClick:w=>{w.preventDefault(),m.handleSubmit(g)()}},previousAction:{label:d("actions.cancel_button_text"),onClick:y}}})}var QO=e=>e?.status==="pending"?"description.pending":"description.verified";function _E({translatorKey:e="domain_management.domain_delete.modal",className:t,customMessages:n,domain:r,isOpen:o,isLoading:s,onClose:u,onDelete:c}){let{t:d}=Se(e,n),p=Y.useCallback(()=>{r&&c(r)},[c,r]);return f.jsx(Ga,{open:o,onOpenChange:m=>!m&&u(),className:X("p-10",t),title:d("title"),content:f.jsx("div",{className:"space-y-6",children:f.jsx("p",{className:"text-sm text-muted-foreground text-(length:--font-size-paragraph)",children:d(QO(r),{domainName:r?.domain})})}),modalActions:{isLoading:s,nextAction:{type:"button",label:d("actions.delete_button_text"),variant:"destructive",disabled:s,onClick:p},previousAction:{label:d("actions.cancel_button_text"),onClick:u}}})}var GO=Oo("shadow-input-hover bg-input relative grid w-full grid-cols-[0_1fr] items-start gap-y-0.5 overflow-clip rounded-3xl p-3 text-sm has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] has-[>svg]:gap-x-3 [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",{variants:{variant:{default:"text-foreground border-b-2 border-transparent",info:"text-info-foreground [&>svg]:text-info-foreground",success:"text-success-foreground [&>svg]:text-success-foreground",warning:"text-warning-foreground [&>svg]:text-warning-foreground",destructive:"text-destructive-foreground [&>svg]:text-destructive-foreground"}},defaultVariants:{variant:"default"}});function CE({className:e,variant:t,...n}){return f.jsx("div",{"data-slot":"alert",role:"alert",className:X(GO({variant:t}),e),...n})}function YO({className:e,...t}){return f.jsx("div",{"data-slot":"alert-title",className:X("col-start-2 line-clamp-1 flex h-auto min-h-4 leading-4.5 font-medium tracking-tight",e),...t})}function wE({className:e,...t}){return f.jsx("div",{"data-slot":"alert-description",className:X("text-muted-foreground col-start-2 grid justify-items-start gap-1 text-sm [&_p]:leading-relaxed",e),...t})}function EE({translatorKey:e="domain_management.domain_verify.modal",className:t,customMessages:n,isOpen:r,isLoading:o,domain:s,error:u,onClose:c,onVerify:d,onDelete:p}){let{t:m}=Se(e,n),g=Y.useCallback(()=>{s&&d(s)},[d,s]),y=Y.useCallback(()=>{s&&p(s)},[p,s]);return f.jsx(Ga,{open:r,onOpenChange:A=>!A&&c(),className:"p-10 break-all",title:m("title",{domainName:s?.domain}),content:f.jsxs("div",{className:X("space-y-4",t),children:[u&&f.jsxs(CE,{variant:"destructive",children:[f.jsx(LB,{className:"h-4 w-4"}),f.jsx(wE,{className:"text-destructive-foreground",children:u})]}),f.jsxs("div",{className:"space-y-2",children:[f.jsx(ea,{htmlFor:"txt-record-name",className:"text-sm font-medium",children:m("txt_record_name.label")}),f.jsx(vn,{id:"txt-record-name",value:s?.verification_host||"",readOnly:!0,className:"text-sm"})]}),f.jsxs("div",{className:"space-y-2",children:[f.jsx(ea,{htmlFor:"txt-record-content",className:"text-sm font-medium",children:m("txt_record_content.label")}),f.jsx(vn,{id:"txt-record-content",value:s?.verification_txt||"",readOnly:!0,className:"text-sm"})]}),f.jsxs("div",{className:"space-y-2 pt-4 border-t border-gray-200",children:[f.jsxs("div",{className:"flex items-center gap-2",children:[f.jsx("span",{className:"text-sm text-foreground font-medium",children:m("verification_status.label")}),f.jsx(Ji,{variant:"warning",children:m("verification_status.pending")})]}),f.jsx("p",{className:"text-sm text-muted-foreground text-(length:--font-size-paragraph)",children:m("verification_status.description")})]}),f.jsxs("div",{className:"flex gap-2 pt-2 -mb-4",children:[f.jsx(Je,{variant:"outline",onClick:g,disabled:o,children:o?f.jsx(dn,{size:"sm"}):m("actions.verify_button_text")}),f.jsx(Je,{variant:"destructive",onClick:y,disabled:o,children:m("actions.delete_button_text")})]})]}),modalActions:{showNext:!1,previousAction:{label:m("actions.done_button_text"),onClick:c,variant:"primary"}}})}function lu({className:e,...t}){return f.jsx(UT,{"data-slot":"switch",className:X("theme-default:shadow-switch-resting data-[state=checked]:from-primary-foreground/0 data-[state=checked]:to-primary-foreground/25 from-primary-foreground/50 to-primary-foreground/0 [&]:bg-accent/50 hover:bg-accent/75 data-[state=checked]:hover:bg-primary theme-default:hover:shadow-switch-hover data-[state=checked]:bg-primary focus-visible:ring-ring focus-within:ring-ring relative h-7 w-[46px] rounded-full bg-gradient-to-l transition-all duration-150 ease-in-out focus-visible:ring-4 active:scale-95 disabled:cursor-not-allowed disabled:opacity-50",e),...t,children:f.jsx(VT,{"data-slot":"switch-thumb",className:X("dark:bg-primary dark:shadow-switch-thumb-dark data-[state=checked]:dark:bg-background [&]:bg-background to-background/0 from-primary/5 shadow-switch-thumb data-[state=checked]:bg-background pointer-events-none absolute top-[4px] left-[4px] h-5 w-5 rounded-full bg-gradient-to-t transition-transform duration-150 ease-in-out data-[state=checked]:translate-x-[calc(100%-2px)] data-[state=unchecked]:translate-x-0")})})}function KO({translatorKey:e="idp_management.edit_sso_provider.tabs.domains",customMessages:t={},readOnly:n,idpDomains:r,domain:o,handleVerify:s,isUpdating:u,isUpdatingId:c,onToggle:d}){let{t:p}=Se(e,t),m=r.includes(o.id);return u&&c===o.id?f.jsx("div",{className:"flex items-center justify-end gap-4 min-w-0",children:f.jsx(dn,{size:"sm"})}):f.jsx("div",{className:"flex items-center justify-end gap-4 min-w-0",children:o.status==="verified"?f.jsxs(Ha,{children:[f.jsx(Qa,{asChild:!0,children:f.jsx("span",{children:f.jsx(lu,{checked:m,onCheckedChange:g=>d(o,g),disabled:n||u})})}),f.jsx(Ca,{children:p(m?"table.actions.disable_domain_tooltip":"table.actions.enable_domain_tooltip")})]}):f.jsx(Je,{variant:"outline",size:"sm",onClick:()=>s(o),children:p("table.columns.verify")})})}function qO(e,t,n){if(!e||t<=0)return{truncated:e,isTruncated:!1};let r=document.createElement("canvas").getContext("2d");if(!r)return{truncated:e,isTruncated:!1};r.font=n;let o="...";if(r.measureText(e).width<=t)return{truncated:e,isTruncated:!1};let s=r.measureText(o).width,u=t-s;if(u<=0)return{truncated:o,isTruncated:!0};let c=0,d=e.length,p=0,m=e.length;for(;c<=d;){let g=Math.floor((c+d)/2),y=e.substring(0,g),A=e.substring(e.length-g);r.measureText(y).width+r.measureText(A).width<=u?(p=g,m=e.length-g,c=g+1):d=g-1}return{truncated:e.substring(0,p)+o+e.substring(m),isTruncated:!0}}var ZO=C.memo(C.forwardRef(({text:e,className:t},n)=>{let[r,o]=C.useState(e),[s,u]=C.useState(!1),c=C.useRef(null),d=C.useRef(null);C.useImperativeHandle(n,()=>c.current);let p=C.useCallback(()=>{let m=c.current;if(!m)return;let g=window.getComputedStyle(m),y=`${g.fontSize} ${g.fontFamily}`,A=m.offsetWidth,{truncated:w,isTruncated:b}=qO(e,A,y);o(w),u(b)},[e]);return C.useEffect(()=>{p();let m=c.current,g=null;return m&&(g=new ResizeObserver(()=>{d.current!==null&&cancelAnimationFrame(d.current),d.current=requestAnimationFrame(()=>{p()})}),g.observe(m)),()=>{d.current!==null&&(cancelAnimationFrame(d.current),d.current=null),g?.disconnect()}},[p]),f.jsx("span",{ref:c,className:X("block min-w-0",t),title:s?e:void 0,children:r})}));function WO({children:e,className:t}){return f.jsx("code",{className:X("bg-background theme-default:shadow-input-resting theme-default:bg-secondary shadow-bevel-xs relative rounded-lg px-[0.35rem] py-[0.2rem] font-mono text-sm font-medium tracking-tight",t),children:e})}var SE=Y.forwardRef(({className:e,...t},n)=>f.jsx("div",{className:"shadow-bevel-sm w-full overflow-clip rounded-2xl",children:f.jsx("div",{className:"overflow-x-auto",children:f.jsx("table",{ref:n,className:X("w-full border-collapse table-fixed",e),...t})})}));SE.displayName="Table";var DE=Y.forwardRef(({className:e,...t},n)=>f.jsx("thead",{ref:n,className:X("bg-muted text-primary text-sm",e),...t}));DE.displayName="TableHeader";var FE=Y.forwardRef(({className:e,...t},n)=>f.jsx("tbody",{ref:n,className:X("[&_tr:last-child]:border-0",e),...t}));FE.displayName="TableBody";var zf=Y.forwardRef(({className:e,disableHover:t,...n},r)=>f.jsx("tr",{ref:r,className:X(!t&&"hover:bg-muted/50","border-border/50 border-b text-sm transition-colors",e),...n}));zf.displayName="TableRow";var RE=Y.forwardRef(({className:e,children:t,isSortable:n,sortDirection:r,...o},s)=>{let u=n!==void 0&&r!==void 0;return f.jsx("th",{ref:s,className:X("hover:bg-accent/10 border-border/50 border-b px-4 py-2 text-left",n&&"group cursor-pointer select-none",e),...o,children:f.jsxs("div",{className:"flex items-center gap-1",children:[t,u&&f.jsxs("div",{className:"ml-2 flex items-center",children:[r===!1&&f.jsx(Cl,{className:"text-muted-foreground h-4 w-4 opacity-0 transition-opacity duration-200 group-hover:opacity-100"}),r==="asc"&&f.jsx(vb,{className:"h-4 w-4"}),r==="desc"&&f.jsx(Cl,{className:"h-4 w-4"})]})]})})});RE.displayName="TableHead";var fg=Y.forwardRef(({className:e,...t},n)=>f.jsx("td",{ref:n,className:X("px-4 py-2",e),...t}));fg.displayName="TableCell";var XO={text:{left:"text-left",center:"text-center",right:"text-right"}},$O=e=>e==null||e==="",JO=(e,t="medium")=>{let n=new Date(e);if(isNaN(n.getTime()))return"Invalid Date";switch(t){case"short":return n.toLocaleDateString();case"long":return n.toLocaleDateString(void 0,{weekday:"long",year:"numeric",month:"long",day:"numeric"});case"relative":{let r=new Date,o=n.getTime()-r.getTime(),s=Math.ceil(o/(1e3*60*60*24));return Math.abs(s)===0?"Today":s===1?"Tomorrow":s===-1?"Yesterday":s>0?`In ${s} days`:`${Math.abs(s)} days ago`}default:return n.toLocaleDateString(void 0,{year:"numeric",month:"short",day:"numeric"})}},eI={copyTooltip:"Copy to clipboard",copiedTooltip:"Copied!"};function tI({value:e,labels:t=eI}){let[n,r]=C.useState(!1),[o,s]=C.useState(!1),u=String(e);return f.jsxs(WO,{className:"w-full flex items-center justify-between gap-2 pr-1",children:[f.jsx("span",{className:"min-w-0 flex-1",children:f.jsx(ZO,{text:u,className:"text-muted-foreground"})}),f.jsxs(Ha,{open:o,onOpenChange:s,children:[f.jsx(Qa,{asChild:!0,children:f.jsx(Je,{variant:"ghost",size:"sm",onClick:async c=>{if(c.stopPropagation(),!!e)try{await navigator.clipboard.writeText(u),r(!0),s(!0),setTimeout(()=>{r(!1),s(!1)},2e3)}catch(d){console.error("Failed to copy text:",d)}},className:"h-6 w-6 p-0 hover:bg-muted/50 shrink-0","aria-label":n?t.copiedTooltip:t.copyTooltip,children:f.jsx(um,{className:"h-3 w-3"})})}),f.jsx(Ca,{children:f.jsx("p",{children:n?t.copiedTooltip:t.copyTooltip})})]})]})}function nI(e,t,n){return n.render?n.render(e,t):f.jsx("span",{className:"text-muted-foreground",children:String(t)})}function rI(e,t,n){if(n.render)return n.render(e,t);let r=JO(t,n.format);return f.jsx("span",{className:"text-muted-foreground",title:new Date(t).toISOString(),children:r})}function aI(e,t,n){return f.jsx("div",{onClick:r=>r.stopPropagation(),children:f.jsx(lu,{checked:!!t,onCheckedChange:r=>{n.onToggle?.(r,e)}})})}function oI(e,t){let n=r=>{r.stopPropagation(),t.onClick(e)};return f.jsx(Je,{variant:t.variant,size:"sm",onClick:n,children:t.buttonText})}function iI(e,t){return f.jsx(Ji,{variant:t.variant,children:String(e)})}function sI(e){return f.jsx(tI,{value:e})}function uI({title:e,subtitle:t,action:n}){return f.jsxs("div",{className:"text-center py-12",children:[f.jsx("h3",{className:"text-md font-medium text-foreground mb-2",children:e}),t&&f.jsx("p",{className:"text-sm text-muted-foreground mb-4",children:t}),n&&f.jsx(Je,{variant:n.variant,onClick:n.onClick,children:n.label})]})}function tc({data:e,columns:t,loading:n=!1,loader:r,emptyState:o,onRowClick:s,className:u,headerAlign:c="left",onSortChange:d,sortConfig:p}){let m=!!d,[g,y]=C.useState([]),A=C.useMemo(()=>m&&p?.key?[{id:p.key,desc:p.direction==="desc"}]:g,[m,p,g]),w=Y.useCallback(E=>{let S=typeof E=="function"?E(A):E;if(m){let F=S[0];d(F?{key:F.id,direction:F.desc?"desc":"asc"}:{key:null,direction:"asc"})}else y(S)},[m,d,A]),b=C.useMemo(()=>t.map((E,S)=>({id:E.accessorKey?String(E.accessorKey):`column-${S}`,accessorKey:E.accessorKey,header:E.title,size:E.width?isNaN(Number(E.width))?void 0:Number(E.width):void 0,enableSorting:E.enableSorting!==!1&&!!E.accessorKey,meta:{headerAlign:E.headerAlign||c||"left",column:E},cell:({getValue:F,row:R})=>{let k=F(),B=R.original;if(E.type==="actions")return f.jsx("div",{onClick:N=>N.stopPropagation(),children:E.render(B)});if(E.type==="custom")return f.jsx(f.Fragment,{children:E.render(B,k)});if(E.type==="switch")return aI(B,k,E);if(E.type==="button")return oI(B,E);if($O(k))return null;switch(E.type){case"text":return nI(B,k,E);case"date":return rI(B,k,E);case"copy":return sI(k);case"badge":return iI(k,E);default:return f.jsx("span",{className:"text-foreground",children:String(k)})}}})),[t,c]),x=wj({data:e,columns:b,state:{sorting:A},onSortingChange:w,getCoreRowModel:yj(),getSortedRowModel:m?void 0:bj(),manualSorting:m,manualPagination:!0});return n?f.jsx("div",{className:X("w-full flex items-center justify-center py-8",u),children:r||f.jsx(dn,{})}):f.jsx("div",{className:X("w-full",u),children:f.jsxs(SE,{children:[f.jsx(DE,{children:x.getHeaderGroups().map(E=>f.jsx(zf,{children:E.headers.map(S=>{let F=S.column.getCanSort(),R=S.column.getIsSorted(),k=S.column.columnDef.meta;return f.jsx(RE,{className:X(F&&"hover:bg-muted/50","transition-colors",XO.text[k.headerAlign]),style:{width:k.column.width,minWidth:k.column.width,maxWidth:k.column.width},onClick:F?S.column.getToggleSortingHandler():void 0,isSortable:F,sortDirection:R,children:bC(S.column.columnDef.header,S.getContext())},S.id)})},E.id))}),f.jsx(FE,{children:x.getRowModel().rows.length===0?f.jsx(zf,{disableHover:!0,children:f.jsx(fg,{colSpan:t.length,children:f.jsx(uI,{...o??{title:"No data available",subtitle:"There are no items to display."}})})}):x.getRowModel().rows.map(E=>f.jsx(zf,{className:X(s&&"cursor-pointer hover:bg-muted/50","transition-colors"),onClick:()=>s?.(E.original),children:E.getVisibleCells().map(S=>{let F=S.column.columnDef.meta;return f.jsx(fg,{className:"text-left",style:{width:F.column.width,minWidth:F.column.width,maxWidth:F.column.width},children:bC(S.column.columnDef.cell,S.getContext())},S.id)})},E.id))})]})})}var lI=({trigger:e,tooltip:t})=>f.jsx(f.Fragment,{children:f.jsxs(Ha,{children:[f.jsx(Qa,{asChild:!0,children:f.jsx("div",{children:e})}),f.jsx(Ca,{children:t.content})]})}),cI=({icon:e,className:t,label:n,onClick:r,disabled:o,variant:s,size:u})=>f.jsxs(Je,{onClick:r,disabled:o,variant:s,size:u,className:X("flex items-center gap-2 w-full sm:w-auto sm:min-w-fit",t),"aria-label":n,children:[e&&f.jsx(e,{className:"h-4 w-4 flex-shrink-0","aria-hidden":"true"}),f.jsx("span",{className:"truncate",children:n})]}),dI=({className:e,"aria-label":t,checked:n,onCheckedChange:r,disabled:o})=>f.jsx("div",{className:X("flex items-center gap-2",e),children:f.jsx(lu,{checked:n,onCheckedChange:r,disabled:o,"aria-label":t})}),es=C.forwardRef(({title:e,description:t,backButton:n,actions:r,isLoading:o,className:s,...u},c)=>{let d=n?.icon||kB,p=(m,g)=>{let y=`action-${g}`;if(o)return f.jsx(dn,{className:"w-4 h-4"},`spinner-${y}`);if(m.hidden)return null;let A=m.type==="switch"?f.jsx(dI,{...m},y):f.jsx(cI,{...m},y);return m.tooltip?f.jsx(lI,{trigger:A,tooltip:m.tooltip},`tooltip-${y}`):A};return f.jsxs("div",{ref:c,className:X("w-full mb-8",s),role:"banner","aria-label":e?`${e} header`:"Header",...u,children:[n&&f.jsxs(Je,{variant:"link",onClick:n.onClick,size:"default",className:"flex items-center text-sm mb-3","aria-label":n.text||"Go back",children:[f.jsx(d,{className:"h-4 w-4","aria-hidden":"true"}),n.text&&f.jsx("span",{children:n.text})]}),f.jsxs("div",{className:"flex items-start justify-between gap-4",children:[f.jsxs("div",{className:"flex flex-col min-w-0 flex-1",children:[e&&f.jsx("h1",{className:X("text-xl sm:text-2xl text-primary md:text-4xl font-bold leading-tight break-words text-left text-(length:--font-size-page-header) mb-0"),children:e}),t&&f.jsx("p",{className:X("text-base text-muted-foreground leading-relaxed break-words text-left text-(length:--font-size-page-description) mt-2"),children:t})]}),r&&r.length>0&&f.jsx("div",{className:"flex-shrink-0 flex items-start gap-2 mt-1",children:r.map(p)})]})]})});es.displayName="Header";function ts(){let{t:e}=Se("common");return C.useCallback((t,n={})=>{Gh(t)&&bt({type:"error",message:(r=>{switch(Ts(r)){case 400:return e("error.bad_request");case 401:return e("error.missing_token");case 403:return zi(r)&&r.body?.type?.includes(PR.INSUFFICIENT_SCOPE)?e("error.insufficient_scope"):e("error.forbidden");case 404:return e("error.not_found");case 429:return e("error.rate_limit");default:return}})(t)??IR(t,n.fallbackMessage??e("error.generic"))})},[e])}var wa={all:["sso-providers"],list:()=>[...wa.all,"list"],organization:["organization","details"]};function BE(e,t,n,r={}){let{t:o}=Se("idp_management.notifications",r),{coreClient:s}=Un(),u=Ua(),c=ts(),d=C.useRef(!1),p=C.useRef(!1),m=ya({queryKey:wa.list(),queryFn:async()=>(await s.getMyOrganizationApiClient().organization.identityProviders.list())?.identity_providers??[],enabled:!!s}),g=ya({queryKey:wa.organization,queryFn:async()=>{let R=await s.getMyOrganizationApiClient().organizationDetails.get();return Ls.fromAPI(R)},enabled:!!s});C.useEffect(()=>{m.isError&&!d.current&&(c(m.error,{fallbackMessage:o("general_error")}),d.current=!0),m.isError||(d.current=!1)},[m.isError,m.error,o,c]),C.useEffect(()=>{g.isError&&!p.current&&(c(g.error,{fallbackMessage:o("general_error")}),p.current=!0),g.isError||(p.current=!1)},[g.isError,g.error,o,c]);let y=Kt({mutationFn:async({selectedIdp:R,enabled:k})=>{if(!R?.id)throw new Error("Invalid provider");if(n?.onBefore&&!n.onBefore(R))throw new fa({message:o("general_error")});let B=em.updateToAPI({strategy:R.strategy,is_enabled:k});return await s.getMyOrganizationApiClient().organization.identityProviders.update(R.id,B)},onSuccess:async(R,{selectedIdp:k})=>{n?.onAfter&&await n.onAfter(k),bt({type:"success",message:o("update_success",{providerName:k.display_name})}),u.setQueryData(wa.list(),B=>B&&B.map(N=>N.id===k.id?{...N,...R}:N))},onError:R=>{c(R,{fallbackMessage:o("general_error")})}}),A=Kt({mutationFn:async R=>{if(!R?.id)throw new Error("Invalid provider");await s.getMyOrganizationApiClient().organization.identityProviders.delete(R.id)},onSuccess:async(R,k)=>{e?.onAfter&&await e.onAfter(k),bt({type:"success",message:o("delete_success",{providerName:k.display_name})}),u.invalidateQueries({queryKey:wa.list()})},onError:R=>{c(R,{fallbackMessage:o("general_error")})}}),w=Kt({mutationFn:async R=>{if(!R?.id)throw new Error("Invalid provider");await s.getMyOrganizationApiClient().organization.identityProviders.detach(R.id)},onSuccess:async(R,k)=>{t?.onAfter&&await t.onAfter(k);let B=u.getQueryData(wa.organization);bt({type:"success",message:o("remove_success",{providerName:k.display_name,organizationName:B?.display_name})}),u.invalidateQueries({queryKey:wa.list()})},onError:R=>{c(R,{fallbackMessage:o("general_error")})}}),b=C.useCallback(async(R,k)=>{if(!R||!s||!R.id)return!1;try{return await y.mutateAsync({selectedIdp:R,enabled:k}),!0}catch{return!1}},[s,y]),x=C.useCallback(async R=>{!R||!s||!R.id||A.mutate(R)},[s,A]),E=C.useCallback(async R=>{!R||!s||!R.id||w.mutate(R)},[s,w]),S=C.useCallback(async()=>{await u.getQueryData(wa.list())},[u]),F=C.useCallback(async()=>{if(!s)return null;try{return await u.ensureQueryData({queryKey:wa.organization,queryFn:async()=>{let R=await s.getMyOrganizationApiClient().organizationDetails.get();return Ls.fromAPI(R)}})}catch(R){return c(R,{fallbackMessage:o("general_error")}),null}},[s,u,o,c]);return{providers:m.data??[],organization:g.data??null,isLoading:m.isLoading||g.isLoading,isDeleting:A.isPending,isRemoving:w.isPending,isUpdating:y.isPending,isUpdatingId:y.isPending?y.variables?.selectedIdp?.id??null:null,fetchProviders:S,fetchOrganizationDetails:F,onDeleteConfirm:x,onRemoveConfirm:E,onEnableProvider:b}}var ns="ACTION_CANCELLED",Rr=e=>e instanceof Error&&e.message===ns,Et={all:["sso-providers"],list:()=>[...Et.all,"list"],detail:e=>[...Et.all,"detail",e],organization:()=>["organization","details"],provisioning:e=>[...Et.all,"provisioning",e],scimTokens:e=>[...Et.all,"scim-tokens",e]};function hg(e,{sso:t,provisioning:n,customMessages:r={}}={}){let{coreClient:o}=Un(),{t:s}=Se("idp_management.notifications",r),u=Ua(),c=ts(),d=C.useRef(!1),p=C.useRef(!1),m=C.useRef(!1),g=ya({queryKey:Et.detail(e),queryFn:async()=>await o.getMyOrganizationApiClient().organization.identityProviders.get(e),enabled:!!o&&!!e}),y=ya({queryKey:Et.organization(),queryFn:async()=>{let T=await o.getMyOrganizationApiClient().organizationDetails.get();return Ls.fromAPI(T)},enabled:!!o,initialData:Xh.create()}),A=ya({queryKey:Et.provisioning(e),queryFn:async()=>{try{return await o.getMyOrganizationApiClient().organization.identityProviders.provisioning.get(e)}catch(T){if(Ts(T)===404)return null;throw T}},enabled:!!o&&!!e});C.useEffect(()=>{g.isError&&!d.current&&(c(g.error,{fallbackMessage:s("general_error")}),d.current=!0),g.isError||(d.current=!1)},[g.isError,g.error,s,c]),C.useEffect(()=>{y.isError&&!m.current&&(c(y.error,{fallbackMessage:s("general_error")}),m.current=!0),y.isError||(m.current=!1)},[y.error,y.isError,s,c]),C.useEffect(()=>{A.isError&&!p.current&&(c(A.error,{fallbackMessage:s("general_error")}),p.current=!0),A.isError||(p.current=!1)},[A.isError,A.error,s,c]);let w=Kt({mutationFn:async T=>{let J=g.data;if(!J)throw new Error("Provider not loaded");if(t?.updateAction?.onBefore&&!t.updateAction.onBefore(J))throw new Error(ns);let le=em.updateToAPI({strategy:J.strategy,...T});return await o.getMyOrganizationApiClient().organization.identityProviders.update(e,le)},onSuccess:async(T,J)=>{let le=g.data;bt({type:"success",message:s("update_success",{providerName:le?.display_name})}),await u.invalidateQueries({queryKey:wa.list()}),u.setQueryData(Et.detail(e),T),t?.updateAction?.onAfter&&le&&await t.updateAction.onAfter(le,T)},onError:T=>{Rr(T)||c(T,{fallbackMessage:s("general_error")})}}),b=Kt({mutationFn:async()=>{let T=g.data;if(!T)throw new Error("Provider not loaded");if(n?.createAction?.onBefore&&!n.createAction.onBefore(T))throw new Error(ns);return await o.getMyOrganizationApiClient().organization.identityProviders.provisioning.create(e)},onSuccess:async T=>{let J=g.data;bt({type:"success",message:s("update_success",{providerName:J?.display_name})}),await u.invalidateQueries({queryKey:Et.detail(e)}),u.setQueryData(Et.provisioning(e),T),n?.createAction?.onAfter&&J&&await n.createAction.onAfter(J,T)},onError:T=>{Rr(T)||c(T,{fallbackMessage:s("general_error")})}}),x=Kt({mutationFn:async()=>{let T=g.data;if(!T)throw new Error("Provider not loaded");if(n?.deleteAction?.onBefore&&!n.deleteAction.onBefore(T))throw new Error(ns);await o.getMyOrganizationApiClient().organization.identityProviders.provisioning.delete(e)},onSuccess:async()=>{let T=g.data;bt({type:"success",message:s("update_success",{providerName:T?.display_name})}),u.setQueryData(Et.provisioning(e),null),await u.invalidateQueries({queryKey:Et.detail(e)}),n?.deleteAction?.onAfter&&T&&await n.deleteAction.onAfter(T)},onError:T=>{Rr(T)||c(T,{fallbackMessage:s("general_error")})}}),E=Kt({mutationFn:async T=>{let J=g.data;if(!J)throw new Error("Provider not loaded");if(n?.createScimTokenAction?.onBefore&&!n.createScimTokenAction.onBefore(J))throw new Error(ns);return await o.getMyOrganizationApiClient().organization.identityProviders.provisioning.scimTokens.create(e,T)},onSuccess:async T=>{let J=g.data;bt({type:"success",message:s("scim_token_create_success")}),await u.invalidateQueries({queryKey:Et.scimTokens(e)}),n?.createScimTokenAction?.onAfter&&J&&await n.createScimTokenAction.onAfter(J,T)},onError:T=>{Rr(T)||c(T,{fallbackMessage:s("general_error")})}}),S=Kt({mutationFn:async T=>{let J=g.data;if(!J)throw new Error("Provider not loaded");if(n?.deleteScimTokenAction?.onBefore&&!n.deleteScimTokenAction.onBefore(J))throw new Error(ns);await o.getMyOrganizationApiClient().organization.identityProviders.provisioning.scimTokens.delete(e,T)},onSuccess:async()=>{let T=g.data;bt({type:"success",message:s("scim_token_delete_sucess")}),await u.invalidateQueries({queryKey:Et.scimTokens(e)}),n?.deleteScimTokenAction?.onAfter&&T&&await n.deleteScimTokenAction.onAfter(T)},onError:T=>{Rr(T)||c(T,{fallbackMessage:s("general_error")})}}),F=Kt({mutationFn:async()=>{let T=g.data;if(!T?.id)throw new Error("Provider not loaded or missing ID");await o.getMyOrganizationApiClient().organization.identityProviders.delete(T.id)},onSuccess:async()=>{let T=g.data;bt({type:"success",message:s("delete_success",{providerName:T?.display_name})}),u.removeQueries({queryKey:Et.detail(e)}),u.removeQueries({queryKey:Et.provisioning(e)}),u.removeQueries({queryKey:Et.scimTokens(e)}),await u.invalidateQueries({queryKey:Et.all}),t?.deleteAction?.onAfter&&T&&await t.deleteAction.onAfter(T)},onError:T=>{c(T,{fallbackMessage:s("general_error")})}}),R=Kt({mutationFn:async()=>{let T=g.data;if(!T?.id)throw new Error("Provider not loaded or missing ID");if(t?.deleteFromOrganizationAction?.onBefore&&!t.deleteFromOrganizationAction.onBefore(T))throw new Error(ns);await u.ensureQueryData({queryKey:Et.organization()}),await o.getMyOrganizationApiClient().organization.identityProviders.detach(T.id)},onSuccess:async()=>{let T=g.data,J=y.data;bt({type:"success",message:s("remove_success",{providerName:T?.display_name,organizationName:J?.display_name})}),u.removeQueries({queryKey:Et.detail(e)}),await u.invalidateQueries({queryKey:Et.list()}),t?.deleteFromOrganizationAction?.onAfter&&T&&await t.deleteFromOrganizationAction.onAfter(T)},onError:T=>{Rr(T)||c(T,{fallbackMessage:s("general_error")})}}),k=C.useCallback(async()=>{if(!o||!e)return null;try{return await u.ensureQueryData({queryKey:Et.detail(e),queryFn:async()=>await o.getMyOrganizationApiClient().organization.identityProviders.get(e)})}catch(T){return c(T,{fallbackMessage:s("general_error")}),null}},[o,e,u,s,c]),B=C.useCallback(async()=>{o&&await u.getQueryData(Et.organization())},[o,u]),N=C.useCallback(async()=>{if(!o||!e)return null;try{return await u.fetchQuery({queryKey:Et.provisioning(e),queryFn:async()=>{try{return await o.getMyOrganizationApiClient().organization.identityProviders.provisioning.get(e)}catch(T){if(Ts(T)===404)return null;throw T}}})}catch(T){return Ts(T)!==404&&c(T,{fallbackMessage:s("general_error")}),null}},[o,e,u,s,c]),P=C.useCallback(async T=>{let J=g.data;if(!(!o||!e||!J))try{await w.mutateAsync(T)}catch(le){if(!Rr(le))throw le}},[o,e,g.data,w]),U=C.useCallback(async()=>{let T=g.data;if(!(!o||!e||!T))try{await b.mutateAsync()}catch(J){if(!Rr(J))throw J}},[o,b,e,g.data]),Q=C.useCallback(async()=>{let T=g.data;if(!(!o||!e||!T))try{await x.mutateAsync()}catch(J){if(!Rr(J))throw J}},[o,x,e,g.data]),$=Kt({mutationFn:async()=>!o||!e?null:await o.getMyOrganizationApiClient().organization.identityProviders.provisioning.scimTokens.list(e),onError:T=>{c(T,{fallbackMessage:s("general_error")})}}),q=C.useCallback(async()=>{try{return await $.mutateAsync()}catch{return null}},[$]),V=C.useCallback(async T=>{let J=g.data;if(!(!o||!e||!J))try{return await E.mutateAsync(T)}catch(le){if(!Rr(le))throw le;return}},[o,E,e,g.data]),W=C.useCallback(async T=>{let J=g.data;if(!(!o||!e||!J))try{await S.mutateAsync(T)}catch(le){if(!Rr(le))throw le}},[o,S,e,g.data]),ae=Kt({mutationFn:async()=>{await o.getMyOrganizationApiClient().organization.identityProviders.updateAttributes(e,{})},onSuccess:()=>{u.invalidateQueries({queryKey:Et.detail(e)}),bt({type:"success",message:s("sso_attributes_sync_success")})},onError:T=>{c(T,{fallbackMessage:s("general_error")})}}),j=C.useCallback(async()=>{!o||!e||await ae.mutateAsync()},[o,e,ae]),G=Kt({mutationFn:async()=>{await o.getMyOrganizationApiClient().organization.identityProviders.provisioning.updateAttributes(e,{})},onSuccess:()=>{u.invalidateQueries({queryKey:Et.provisioning(e)}),bt({type:"success",message:s("provisioning_attributes_sync_success")})},onError:T=>{c(T,{fallbackMessage:s("general_error")})}}),te=C.useCallback(async()=>{!o||!e||await G.mutateAsync()},[o,e,G]),ue=C.useCallback(async()=>{let T=g.data;if(!(!o||!T?.id))try{await F.mutateAsync()}catch(J){if(!Rr(J))throw J}},[o,F,g.data]),ie=C.useCallback(async()=>{let T=g.data;if(!(!o||!T?.id))try{await R.mutateAsync()}catch(J){if(!Rr(J))throw J}},[o,R,g.data]),z=C.useMemo(()=>{let T=g.data;return(T&&"attributes"in T?T.attributes??[]:[]).some(J=>J.is_extra||J.is_missing)},[g.data]),O=C.useMemo(()=>(A.data?.attributes??[]).some(T=>T.is_extra||T.is_missing),[A.data]);return{provider:g.data??null,organization:y.data??Xh.create(),provisioningConfig:A.data??null,isLoading:g.isLoading||y.isLoading,isUpdating:w.isPending,isDeleting:F.isPending,isRemoving:R.isPending,isProvisioningUpdating:b.isPending,isProvisioningDeleting:x.isPending,isProvisioningLoading:A.isLoading||A.isFetching,isScimTokensLoading:$.isPending,isScimTokenCreating:E.isPending,isScimTokenDeleting:S.isPending,isSsoAttributesSyncing:ae.isPending,isProvisioningAttributesSyncing:G.isPending,hasSsoAttributeSyncWarning:z,hasProvisioningAttributeSyncWarning:O,fetchProvider:k,fetchOrganizationDetails:B,fetchProvisioning:N,updateProvider:P,createProvisioning:U,deleteProvisioning:Q,listScimTokens:q,createScimToken:V,deleteScimToken:W,syncSsoAttributes:j,syncProvisioningAttributes:te,onDeleteConfirm:ue,onRemoveConfirm:ie}}var cu={all:["sso-domains"],lists:()=>[...cu.all,"list"],list:e=>[...cu.lists(),e]};function kE(e,{customMessages:t={},domains:n,provider:r}={}){let{coreClient:o}=Un(),{t:s}=Se("idp_management.notifications",t),u=ts(),c=Ua(),[d,p]=C.useState(null),[m,g]=C.useState(!1),[y,A]=C.useState(!1),[w,b]=C.useState(void 0),[x,E]=C.useState(!1),[S,F]=C.useState(!1),[R,k]=C.useState(null),B=ya({queryKey:cu.list(e),queryFn:async()=>{let{response:O}=await o.getMyOrganizationApiClient().organization.domains.list();return O.organization_domains},enabled:!!o&&!!e}),N=B.data??[],P=B.isLoading;C.useEffect(()=>{B.error&&u(B.error,{fallbackMessage:s("general_error")})},[B.error,u,s]);let U=C.useMemo(()=>{let O=r?.domains??[];return N.filter(T=>O.includes(T.domain)).map(T=>T.id)},[r?.domains,N]),Q=Kt({mutationFn:async O=>{if(n?.createAction?.onBefore&&!n.createAction.onBefore(O))throw new fa({message:s("domain_create.on_before")});let T=await o.getMyOrganizationApiClient().organization.domains.create(O);return n?.createAction?.onAfter?.(T),T},onSuccess:()=>{c.invalidateQueries({queryKey:cu.list(e)}),c.invalidateQueries({queryKey:Et.detail(e)})}}),$=Kt({mutationFn:async O=>{if(n?.verifyAction?.onBefore&&!n.verifyAction.onBefore(O))throw new fa({message:s("domain_verify.on_before")});let T=await o.getMyOrganizationApiClient().organization.domains.verify.create(O.id);return n?.verifyAction?.onAfter&&await n.verifyAction.onAfter(O),{updatedDomain:T,isVerified:T.status==="verified"}},onSuccess:({updatedDomain:O,isVerified:T},J)=>{T&&c.setQueryData(cu.list(e),le=>le&&le.map(me=>me.id===J.id?{...me,...O}:me))}}),q=Kt({mutationFn:async O=>{if(!o)return O;if(n?.deleteAction?.onBefore&&!n.deleteAction.onBefore(O))throw new fa({message:s("domain_delete.on_before")});return await o.getMyOrganizationApiClient().organization.domains.delete(O.id),n?.deleteAction?.onAfter&&await n.deleteAction.onAfter(O),O},onSuccess:()=>{c.invalidateQueries({queryKey:cu.list(e)}),c.invalidateQueries({queryKey:Et.detail(e)})}}),V=Kt({mutationFn:async O=>{if(n?.associateToProviderAction?.onBefore&&!n.associateToProviderAction.onBefore(O,r))throw new fa({message:s("domain_associate_provider.on_before")});return await o.getMyOrganizationApiClient().organization.identityProviders.domains.create(e,{domain:O.domain}),n?.associateToProviderAction?.onAfter&&await n.associateToProviderAction.onAfter(O,r),O},onSuccess:()=>{c.invalidateQueries({queryKey:Et.detail(e)})}}),W=Kt({mutationFn:async O=>{if(!r)return O;if(n?.deleteFromProviderAction?.onBefore&&!n.deleteFromProviderAction.onBefore(O,r))throw new fa({message:s("domain_delete_provider.on_before")});return await o.getMyOrganizationApiClient().organization.identityProviders.domains.delete(r.id,O.domain),n?.deleteFromProviderAction?.onAfter&&await n.deleteFromProviderAction.onAfter(O),O},onSuccess:()=>{c.invalidateQueries({queryKey:Et.detail(e)})}}),ae=C.useCallback(async O=>{try{let T=await Q.mutateAsync({domain:O});bt({type:"success",message:s("domain_create.success",{domainName:T?.domain})}),p(T),E(!1),g(!0)}catch(T){u(T,{fallbackMessage:s("domain_create.error")})}},[u,Q,s]),j=C.useCallback(()=>{g(!1),b(void 0)},[]),G=C.useCallback(async O=>{try{let{isVerified:T}=await $.mutateAsync(O);T?(g(!1),bt({type:"success",message:s("domain_verify.success",{domainName:O.domain})}),await V.mutateAsync(O)):b(s("domain_verify.verification_failed",{domainName:O.domain}))}catch(T){u(T,{fallbackMessage:s("domain_verify.verification_failed")})}},[$,s,u,V]),te=C.useCallback(O=>{p(O),g(!1),A(!0)},[]),ue=C.useCallback(async O=>{try{await q.mutateAsync(O),bt({type:"success",message:s("domain_delete.success",{domainName:O.domain})}),A(!1),g(!1)}catch(T){u(T,{fallbackMessage:s("domain_delete.error")})}},[u,q,s]),ie=C.useCallback(async O=>{F(!0),k(O.id);try{let{isVerified:T}=await $.mutateAsync(O);T?(bt({type:"success",message:s("domain_verify.success",{domainName:O.domain})}),await V.mutateAsync(O)):bt({type:"error",message:s("domain_verify.verification_failed",{domainName:O.domain})})}catch(T){u(T,{fallbackMessage:s("domain_verify.verification_failed",{domainName:O.domain})})}finally{F(!1),k(null)}},[$,s,u,V]),z=C.useCallback(async(O,T)=>{if(F(!0),k(O.id),T)try{await V.mutateAsync(O),bt({type:"success",message:s("domain_associate_provider.success",{domain:O.domain,idp:r?.name})})}catch(J){u(J,{fallbackMessage:s("general_error")})}finally{F(!1),k(null)}else try{await W.mutateAsync(O),bt({type:"success",message:s("domain_delete_provider.success",{domain:O.domain,idp:r?.name})})}catch(J){u(J,{fallbackMessage:s("general_error")})}finally{F(!1),k(null)}},[V,s,r,u,W]);return{isLoading:P,domainsList:N,isCreating:Q.isPending,selectedDomain:d,showVerifyModal:m,showDeleteModal:y,isVerifying:$.isPending,verifyError:w,isDeleting:q.isPending,showCreateModal:x,handleCreate:ae,handleCloseVerifyModal:j,handleVerify:G,handleDeleteClick:te,handleDelete:ue,setShowCreateModal:E,setShowDeleteModal:A,idpDomains:U,handleVerifyActionColumn:ie,isUpdating:S,isUpdatingId:R,handleToggleSwitch:z}}function ME(e){switch(e){case"verified":return"success";case"pending":return"warning";case"failed":return"destructive";default:return"outline"}}function fI({customMessages:e={},styling:t={variables:{common:{},light:{},dark:{}},classes:{}},readOnly:n=!1,schema:r,idpId:o,domains:s,provider:u}){let{t:c}=Se("idp_management.edit_sso_provider.tabs.domains.content",e),{isDarkMode:d}=en(),p=Y.useMemo(()=>cn(t,d),[t,d]),{domainsList:m,isCreating:g,selectedDomain:y,showVerifyModal:A,isVerifying:w,showDeleteModal:b,verifyError:x,handleCloseVerifyModal:E,handleVerify:S,handleDeleteClick:F,isLoading:R,isDeleting:k,setShowDeleteModal:B,handleDelete:N,setShowCreateModal:P,showCreateModal:U,handleCreate:Q,idpDomains:$,handleVerifyActionColumn:q,isUpdating:V,isUpdatingId:W,handleToggleSwitch:ae}=kE(o,{customMessages:e,domains:s,provider:u}),j=Y.useMemo(()=>[{type:"text",accessorKey:"domain",title:c("table.columns.name"),render:G=>f.jsx("div",{className:"font-medium text-primary truncate",children:G.domain})},{type:"text",accessorKey:"status",title:c("table.columns.status"),render:G=>f.jsx(Ji,{variant:ME(G.status),size:"sm",children:c(`table.domain_statuses.${G.status}`)})},{type:"actions",title:"",render:G=>f.jsx(KO,{translatorKey:"idp_management.edit_sso_provider.tabs.domains.content",idpDomains:$,readOnly:n,isUpdating:V,isUpdatingId:W,customMessages:e,onToggle:ae,handleVerify:q,domain:G})}],[c]);return f.jsxs("div",{style:p.variables,className:"space-y-8",children:[f.jsx("div",{className:p.classes?.["SsoDomainsTab-header"],children:f.jsx(es,{title:c("title"),description:c("description"),actions:[{type:"button",label:c("create_button_text"),onClick:()=>P(!0),icon:Ad,disabled:s?.createAction?.disabled||n}]})}),f.jsx(tc,{columns:j,data:m,loading:R,emptyState:{title:c("table.empty_message")},className:p.classes?.["SsoDomainsTab-table"]}),f.jsx(xE,{translatorKey:"idp_management.edit_sso_provider.tabs.domains.content.domain_create.modal",className:p.classes?.["SsoDomainsTab-createModal"],isOpen:U,isLoading:g,schema:r?.create,onClose:()=>P(!1),onCreate:Q,customMessages:e.domain_create}),f.jsx(EE,{translatorKey:"idp_management.edit_sso_provider.tabs.domains.content.domain_verify.modal",className:p.classes?.["SsoDomainsTab-verifyModal"],isOpen:A,isLoading:w,domain:y,error:x,onClose:E,onVerify:S,onDelete:F,customMessages:e.domain_verify}),f.jsx(_E,{translatorKey:"idp_management.edit_sso_provider.tabs.domains.content.domain_delete.modal",className:p.classes?.["SsoDomainsTab-deleteModal"],domain:y,isOpen:b,isLoading:k,onClose:()=>B(!1),onDelete:N,customMessages:e.domain_delete})]})}function NE({onChange:e,customMessages:t={},className:n}){let r=s=>{e(s.target.value)},{t:o}=Se("idp_management.delete_sso_provider.modal.content",t);return f.jsxs("div",{className:n,children:[f.jsx("p",{id:"delete-modal-content-description",className:X("font-normal block text-sm text-left text-(length:--font-size-paragraph) text-muted-foreground mt-6 mb-6"),children:o("description")}),f.jsx(ea,{htmlFor:"provider-name",className:"text-sm text-(length:--font-size-label) font-medium",children:o("field.label")}),f.jsx(Zt,{id:"provider-name",type:"text",placeholder:o("field.placeholder"),onChange:r,className:"mt-2 mb-6"})]})}function TE({className:e,isOpen:t,onClose:n,provider:r,onDelete:o,isLoading:s=!1,customMessages:u={}}){let{t:c}=Se("idp_management.delete_sso_provider",u),[d,p]=C.useState(""),m=C.useCallback(A=>{p(A)},[]),g=C.useCallback(async()=>{r&&(await o(r),n())},[o,r,n]),y=C.useCallback(A=>{A||n()},[n]);return C.useEffect(()=>{t&&p("")},[t]),f.jsx(Ga,{open:t,onOpenChange:y,className:X("p-10",e),title:c("modal.title",{providerName:r.name}),content:f.jsxs("div",{className:"space-y-6",children:[f.jsx("p",{className:X("text-sm text-muted-foreground text-(length:--font-size-paragraph)"),children:c("modal.description",{providerName:r.name})}),f.jsx(NE,{onChange:m,customMessages:u.modal?.content})]}),modalActions:{isLoading:s,nextAction:{type:"button",label:c("modal.actions.delete_button_label"),onClick:g,variant:"destructive",disabled:s||d!==r.name},previousAction:{label:c("modal.actions.cancel_button_label"),onClick:n}}})}function hI({provider:e,onDelete:t,customMessages:n={},isLoading:r,readOnly:o}){let{t:s}=Se("idp_management.delete_sso_provider",n),[u,c]=C.useState(!1),d=C.useCallback(()=>{c(!0)},[]),p=C.useCallback(()=>{c(!1)},[]);return f.jsxs(f.Fragment,{children:[f.jsx("div",{className:X("w-full"),children:f.jsx(Sr,{className:"p-6",children:f.jsxs(Va,{className:"flex items-start justify-between gap-6 p-0",children:[f.jsxs("div",{className:"flex-1 space-y-2",children:[f.jsx("h3",{className:X("text-lg font-semibold text-left text-(length:--font-size-subtitle)"),children:s("title",{providerName:e.name})}),f.jsx("p",{className:X("text-sm text-muted-foreground text-left text-(length:--font-size-paragraph)"),children:s("description")})]}),f.jsx(Je,{variant:"destructive",onClick:d,disabled:o,className:"shrink-0",children:s("delete_button_label")})]})})}),f.jsx(TE,{isOpen:u,onClose:p,provider:e,onDelete:t,isLoading:r,customMessages:n.modal})]})}function jE({translatorKey:e="idp_management.edit_sso_provider.tabs.sso.content.attribute_sync_alert",className:t,customMessages:n,onSync:r,isSyncing:o=!1}){let[s,u]=C.useState(!1),{t:c}=Se(e,n),d=()=>{u(!0)},p=async()=>{r&&await r(),u(!1)};return f.jsxs(f.Fragment,{children:[f.jsxs(CE,{variant:"warning",className:X("flex items-center justify-between",t),children:[f.jsxs("div",{className:"flex items-start gap-2",children:[f.jsx(HB,{className:"h-4 w-4 mt-0.5"}),f.jsxs("div",{children:[f.jsx(YO,{children:c("title")}),f.jsx(wE,{children:c("description")})]})]}),f.jsx(Je,{variant:"outline",size:"default",onClick:d,disabled:o,children:c("sync_button_label")})]}),f.jsx(Bf,{open:s,onOpenChange:u,children:f.jsxs(kf,{children:[f.jsxs(Mf,{children:[f.jsx(Nf,{children:c("sync_modal.title")}),f.jsx(aE,{children:c("sync_modal.description")})]}),f.jsxs(rE,{children:[f.jsx(Je,{variant:"outline",onClick:()=>u(!1),disabled:o,children:c("sync_modal.actions.cancel_button_label")}),f.jsx(Je,{onClick:p,disabled:o,children:c("sync_modal.actions.proceed_button_label")})]})]})})]})}function Lf({className:e,...t}){return f.jsx(GC,{"data-slot":"checkbox",className:X("group shadow-checkbox-resting peer hover:shadow-checkbox-hover focus-visible:ring-ring hover:border-primary/50 border-border data-[state=checked]:bg-primary data-[state=indeterminate]:border-primary data-[state=indeterminate]:bg-primary data-[state=checked]:text-primary-foreground data-[state=checked]:border-primary focus-visible:border-ring aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive relative flex size-6 shrink-0 appearance-none items-center justify-center rounded-lg border transition-[colors,shadow] duration-150 ease-in-out outline-none focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50",e),...t,children:f.jsx(KC,{"data-slot":"checkbox-indicator",className:"group-data-[state=checked]:animate-in group-data-[state=unchecked]:animate-out group-data-[state=unchecked]:fade-out-0 group-data-[state=checked]:fade-in-0 group-data-[state=unchecked]:slide-out-to-bottom-5 group-data-[state=unchecked]:zoom-out-75 group-data-[state=checked]:zoom-in-75 group-data-[state=checked]:slide-in-from-bottom-5 text-primary-foreground stroke-primary-foreground duration-150 ease-in-out group-data-[state=checked]:block",children:t.checked==="indeterminate"?f.jsx(OB,{className:"size-3 stroke-[4px]",absoluteStrokeWidth:!0}):f.jsx(sm,{className:"size-3 stroke-[4px]",absoluteStrokeWidth:!0})})})}function rs({idpConfig:e,readOnly:t=!1,customMessages:n={}}){let{t:r}=Se("idp_management.create_sso_provider.provider_configure",n),o=p_(),s=e?.organization?.can_set_show_as_button,u=e?.organization?.can_set_assign_membership_on_login;return!s&&!u?null:f.jsxs("div",{className:"space-y-6 pt-4",children:[s&&f.jsx(Ue,{control:o.control,name:"show_as_button",render:({field:c})=>f.jsxs(Ve,{className:"flex flex-row items-start space-x-3 space-y-0",children:[f.jsx(Qe,{children:f.jsx(Lf,{checked:c.value,onCheckedChange:c.onChange,disabled:t})}),f.jsxs("div",{className:"space-y-1 leading-none",children:[f.jsx(He,{className:"text-sm font-normal",children:r("fields.common.show_as_button.label")}),f.jsx(vt,{className:"text-sm",children:r("fields.common.show_as_button.helper_text")})]})]})}),u&&f.jsx(Ue,{control:o.control,name:"assign_membership_on_login",render:({field:c})=>f.jsxs(Ve,{className:"flex flex-row items-start space-x-3 space-y-0",children:[f.jsx(Qe,{children:f.jsx(Lf,{checked:c.value,onCheckedChange:c.onChange,disabled:t})}),f.jsxs("div",{className:"space-y-1 leading-none",children:[f.jsx(He,{className:"text-sm font-normal",children:r("fields.common.assign_membership_on_login.label")}),f.jsx(vt,{className:"text-sm",children:r("fields.common.assign_membership_on_login.helper_text")})]})]})})]})}function mg({value:e=[],onChange:t,onInvalidFiles:n,onRemove:r,maxSize:o,accept:s,maxFiles:u=1,preview:c=!0,className:d,disabled:p,...m}){let g=C.useRef(null),[y,A]=C.useState(!1),w=C.useCallback(F=>{F.preventDefault(),F.stopPropagation(),F.type==="dragenter"||F.type==="dragover"?A(!0):F.type==="dragleave"&&A(!1)},[]),b=C.useCallback(F=>{F.preventDefault(),F.stopPropagation(),A(!1);let R=Array.from(F.dataTransfer.files);E(R)},[]),x=C.useCallback(F=>{let R=Array.from(F.target.files||[]);E(R)},[]),E=C.useCallback(F=>{if(p)return;let R=[],k=[];F.forEach(B=>{if(o&&B.size>o){k.push(B);return}if(s&&!s.split(",").some(N=>{let P=N.trim().toLowerCase(),U=B.name.toLowerCase(),Q=B.type.toLowerCase();if(P.startsWith("."))return U.endsWith(P);if(P===Q)return!0;if(P.endsWith("/*")){let $=P.slice(0,-2);return Q.startsWith(`${$}/`)}return!1})){k.push(B);return}R.push(B)}),k.length>0&&n?.(k),t?.(u===1?R.slice(0,1):[...e,...R].slice(0,u)),g.current&&(g.current.value="")},[p,o,s,u,t,n,e]),S=C.useCallback(F=>{r?.(F),t?.(e.filter(R=>R!==F))},[t,r,e]);return f.jsxs("div",{className:X("space-y-4",d),children:[f.jsxs("div",{onDragEnter:w,onDragLeave:w,onDragOver:w,onDrop:b,className:X("border-muted-foreground/25 relative flex min-h-[150px] cursor-pointer items-center justify-center rounded-lg border-2 border-dashed p-4 text-center transition-colors",y&&"border-primary",p&&"cursor-not-allowed opacity-60",d),children:[f.jsx("input",{ref:g,type:"file",multiple:u!==1,accept:s,onChange:x,disabled:p,className:"absolute inset-0 cursor-pointer opacity-0 disabled:cursor-not-allowed",...m}),f.jsxs("div",{className:"flex flex-col items-center gap-2",children:[f.jsx(QB,{className:"text-muted-foreground h-8 w-8"}),f.jsx("p",{className:"text-muted-foreground text-sm",children:"Drag & drop files here, or click to select files"}),s&&f.jsxs("p",{className:"text-muted-foreground text-xs",children:["Allowed files: ",s]}),o&&f.jsxs("p",{className:"text-muted-foreground text-xs",children:["Max size: ",(o/1024/1024).toFixed(2),"MB"]})]})]}),c&&e.length>0&&f.jsx("div",{className:"grid gap-4",children:e.map((F,R)=>f.jsxs("div",{className:"flex items-center gap-2 rounded-md border p-2",children:[f.jsxs("div",{className:"flex-1 truncate",children:[f.jsx("p",{className:"text-sm font-medium",children:F.name}),f.jsxs("p",{className:"text-muted-foreground text-xs",children:[(F.size/1024).toFixed(2),"KB"]})]}),f.jsx("button",{type:"button",onClick:()=>S(F),className:"hover:bg-muted shrink-0 rounded-md p-1 transition-colors",disabled:p,children:f.jsx(_b,{className:"size-4"})})]},R))})]})}function pg({className:e,...t}){return f.jsx(cw,{"data-slot":"radio-group",className:X("space-y-2",e),...t})}function du({className:e,...t}){return f.jsx(kP,{"data-slot":"radio-group-item",className:X("shadow-checkbox-resting peer border-border hover:shadow-checkbox-hover data-[state=checked]:hover:border-primary data-[state=checked]:border-primary hover:border-accent focus-visible:ring-ring data-[disabled]:border-border/50 data-[disabled]:bg-muted/50 data-[disabled]:data-[state=checked]:border-border/50 size-5 appearance-none rounded-full border transition-all duration-150 ease-in-out focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:outline-hidden disabled:cursor-not-allowed data-[state=checked]:border-7",e),...t,children:f.jsx(MP,{"data-slot":"radio-group-indicator",className:"fill-primary-foreground top-1/2 left-1/2 hidden size-2 -translate-x-1/2 -translate-y-1/2 data-[checked]:absolute"})})}var mI=C.forwardRef(function({initialData:e,readOnly:t=!1,customMessages:n={},className:r,onFormDirty:o,idpConfig:s},u){let{t:c}=Se("idp_management.create_sso_provider.provider_configure",n),[d,p]=C.useState([]),m=e,g=Cr({resolver:$r(Li("adfs")),mode:Fr,reValidateMode:fo,defaultValues:{meta_data_source:m?.meta_data_source||"meta_data_url",meta_data_location_url:m?.meta_data_location_url||"",adfs_server:m?.adfs_server||"",fedMetadataXml:m?.fedMetadataXml||""}}),{isDirty:y}=g.formState;C.useEffect(()=>{o?.(y)},[y,o]),C.useImperativeHandle(u,()=>({validate:async()=>await g.trigger(),getData:()=>g.getValues(),isDirty:()=>g.formState.isDirty,reset:x=>{x?g.reset(x):g.reset()}}));let A=g.watch("meta_data_source"),w=A==="meta_data_file",b=async x=>{p(x);let E=x[0];if(E)try{let S=await E.text();g.setValue("fedMetadataXml",S)}catch(S){console.error("Error reading file:",S)}};return f.jsx(Dr,{...g,children:f.jsxs("div",{className:X("space-y-6",r),children:[f.jsx(Ue,{control:g.control,name:"meta_data_source",render:({field:x})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:c("fields.adfs.meta_data_source.label")}),f.jsx(Qe,{children:f.jsxs(pg,{value:x.value,onValueChange:x.onChange,disabled:t,className:"flex flex-col space-y-2",children:[f.jsxs("div",{className:"flex items-center space-x-2",children:[f.jsx(du,{value:"meta_data_url",id:"meta_data_url"}),f.jsx(ea,{htmlFor:"meta_data_url",className:"text-sm font-normal cursor-pointer",children:c("fields.adfs.meta_data_source.options.meta_data_url.label")})]}),f.jsxs("div",{className:"flex items-center space-x-2",children:[f.jsx(du,{value:"meta_data_file",id:"meta_data_file"}),f.jsx(ea,{htmlFor:"meta_data_file",className:"text-sm font-normal cursor-pointer",children:c("fields.adfs.meta_data_source.options.meta_data_file.label")})]})]})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"})]})}),A==="meta_data_url"&&f.jsxs(f.Fragment,{children:[f.jsx(Ue,{control:g.control,name:"adfs_server",render:({field:x,fieldState:E})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:c("fields.adfs.meta_data_url.label")}),f.jsx(Qe,{children:f.jsx(Zt,{type:"url",placeholder:c("fields.adfs.meta_data_url.placeholder"),error:!!E.error,readOnly:t,"aria-required":!0,"aria-invalid":!!E.error,...x})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:c("fields.adfs.meta_data_url.helper_text")})]})}),f.jsx(Ue,{control:g.control,name:"meta_data_location_url",render:({field:x,fieldState:E})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:c("fields.adfs.meta_data_location_url.label")}),f.jsx(Qe,{children:f.jsx(vn,{type:"url",placeholder:c("fields.adfs.meta_data_location_url.placeholder"),error:!!E.error,readOnly:t,...x})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:c("fields.adfs.meta_data_location_url.helper_text")})]})})]}),w&&f.jsx(Ue,{control:g.control,name:"fedMetadataXml",render:()=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:c("fields.adfs.federation_metadata_file.label")}),f.jsx(Qe,{children:f.jsx("div",{className:"space-y-3",children:f.jsx(mg,{accept:".xml",onChange:b,value:d,maxFiles:1,disabled:t,className:"w-full",placeholder:c("fields.adfs.federation_metadata_file.placeholder")})})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:c("fields.adfs.federation_metadata_file.helper_text")})]})}),f.jsx(rs,{idpConfig:s,readOnly:t,customMessages:n})]})})}),nc=(e="create")=>C.useMemo(()=>({showCopyButtons:e==="edit"}),[e]),pI=C.forwardRef(function({initialData:e,readOnly:t=!1,customMessages:n={},className:r,onFormDirty:o,idpConfig:s,mode:u="create"},c){let{t:d}=Se("idp_management.create_sso_provider.provider_configure",n),{coreClient:p}=Un(),{showCopyButtons:m}=nc(u),g=C.useMemo(()=>`https://${p?.getDomain()||"YOUR_DOMAIN"}/login/callback`,[p]),y=e,A=Cr({resolver:$r(Li("google-apps")),mode:Fr,reValidateMode:fo,defaultValues:{domain:y?.domain||"",client_id:y?.client_id||"",client_secret:y?.client_secret||"",callback_url:g||""}}),{isDirty:w}=A.formState;return C.useEffect(()=>{o?.(w)},[w,o]),C.useImperativeHandle(c,()=>({validate:async()=>await A.trigger(),getData:()=>A.getValues(),isDirty:()=>A.formState.isDirty,reset:b=>{b?A.reset(b):A.reset()}})),f.jsx(Dr,{...A,children:f.jsxs("div",{className:X("space-y-6",r),children:[f.jsx(Ue,{control:A.control,name:"domain",render:({field:b,fieldState:x})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:d("fields.google-apps.domain.label")}),f.jsx(Qe,{children:f.jsx(Zt,{type:"text",placeholder:d("fields.google-apps.domain.placeholder"),error:!!x.error,readOnly:t,...b})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"})]})}),f.jsx(Ue,{control:A.control,name:"client_id",render:({field:b,fieldState:x})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:d("fields.google-apps.client_id.label")}),f.jsx(Qe,{children:f.jsx(vn,{type:"text",placeholder:d("fields.google-apps.client_id.placeholder"),error:!!x.error,readOnly:t,showCopyButton:m,...b})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:d("fields.google-apps.client_id.helper_text")})]})}),f.jsx(Ue,{control:A.control,name:"client_secret",render:({field:b,fieldState:x})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:d("fields.google-apps.client_secret.label")}),f.jsx(Qe,{children:f.jsx(vn,{type:"password",placeholder:d("fields.google-apps.client_secret.placeholder"),error:!!x.error,readOnly:t,showCopyButton:m,...b})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:d("fields.google-apps.client_secret.helper_text")})]})}),f.jsx(Ue,{control:A.control,name:"callback_url",render:({field:b,fieldState:x})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:d("fields.google-apps.callback_url.label")}),f.jsx(Qe,{children:f.jsx(vn,{type:"text",placeholder:d("fields.google-apps.callback_url.placeholder"),error:!!x.error,readOnly:!0,...b})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:d("fields.google-apps.callback_url.helper_text")})]})}),f.jsx(rs,{idpConfig:s,readOnly:t,customMessages:n})]})})}),gI=C.forwardRef(function({initialData:e,readOnly:t=!1,customMessages:n={},className:r,onFormDirty:o,idpConfig:s,mode:u="create"},c){let{t:d}=Se("idp_management.create_sso_provider.provider_configure",n),{showCopyButtons:p}=nc(u),m=e,g=Cr({resolver:$r(Li("oidc")),mode:Fr,reValidateMode:fo,defaultValues:{discovery_url:m?.discovery_url||"",type:m?.type||"back_channel",client_id:m?.client_id||"",client_secret:m?.client_secret||""}}),{isDirty:y}=g.formState;C.useEffect(()=>{o?.(y)},[y,o]),C.useImperativeHandle(c,()=>({validate:async()=>await g.trigger(),getData:()=>g.getValues(),isDirty:()=>g.formState.isDirty,reset:b=>{b?g.reset(b):g.reset()}}));let A=g.watch("type"),w=A==="back_channel";return C.useEffect(()=>{A==="front_channel"&&(g.clearErrors("client_secret"),g.setValue("client_secret","",{shouldValidate:!1}))},[A,g]),f.jsx(Dr,{...g,children:f.jsxs("div",{className:X("space-y-6",r),children:[f.jsx(Ue,{control:g.control,name:"discovery_url",render:({field:b,fieldState:x})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:d("fields.oidc.discovery_url.label")}),f.jsx(Qe,{children:f.jsx(Zt,{type:"url",placeholder:d("fields.oidc.discovery_url.placeholder"),error:!!x.error,readOnly:t,"aria-required":!0,"aria-invalid":!!x.error,...b})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:d("fields.oidc.discovery_url.helper_text")})]})}),f.jsx(Ue,{control:g.control,name:"type",render:({field:b})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:d("fields.oidc.type.label")}),f.jsx(Qe,{children:f.jsxs(pg,{value:b.value,onValueChange:b.onChange,disabled:t,className:"flex flex-col space-y-2",children:[f.jsxs("div",{className:"flex items-center space-x-2",children:[f.jsx(du,{value:"back_channel",id:"back_channel"}),f.jsx(ea,{htmlFor:"back_channel",className:"text-sm font-normal cursor-pointer",children:d("fields.oidc.type.options.back_channel.label")})]}),f.jsxs("div",{className:"flex items-center space-x-2",children:[f.jsx(du,{value:"front_channel",id:"front_channel"}),f.jsx(ea,{htmlFor:"front_channel",className:"text-sm font-normal cursor-pointer",children:d("fields.oidc.type.options.front_channel.label")})]})]})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:d("fields.oidc.type.helper_text")})]})}),f.jsx(Ue,{control:g.control,name:"client_id",render:({field:b,fieldState:x})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:d("fields.oidc.client_id.label")}),f.jsx(Qe,{children:f.jsx(vn,{type:"text",placeholder:d("fields.oidc.client_id.placeholder"),error:!!x.error,readOnly:t,showCopyButton:p,"aria-required":!0,"aria-invalid":!!x.error,...b})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:d("fields.oidc.client_id.helper_text")})]})}),w&&f.jsx(Ue,{control:g.control,name:"client_secret",render:({field:b,fieldState:x})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:d("fields.oidc.client_secret.label")}),f.jsx(Qe,{children:f.jsx(vn,{type:"password",placeholder:d("fields.oidc.client_secret.placeholder"),error:!!x.error,readOnly:t,showCopyButton:p,"aria-required":!0,"aria-invalid":!!x.error,...b})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:d("fields.oidc.client_secret.helper_text")})]})}),f.jsx(rs,{idpConfig:s,readOnly:t,customMessages:n})]})})}),vI=Oo("focus-within:ring-ring inline-flex items-center gap-2 rounded-md py-0.5 underline-offset-4 transition-colors focus:ring-3 focus-visible:outline-hidden",{variants:{variant:{destructive:"text-destructive hover:text-destructive/90",muted:"text-muted hover:text-muted/80",primary:"text-primary hover:text-primary/90"},underline:{none:"no-underline",hover:"no-underline hover:underline",always:"underline"}},defaultVariants:{variant:"primary",underline:"always"}});function rc({ref:e,className:t,children:n,variant:r,underline:o,...s}){return f.jsx("a",{ref:e,className:X(vI({variant:r,underline:o}),t),...s,children:n})}var gg={domain:"https://developer.okta.com/docs/guides/find-your-domain/main/",client_id:"https://developer.okta.com/docs/guides/find-your-app-credentials/main",client_secret:"https://developer.okta.com/docs/guides/find-your-app-credentials/main"},AI=C.forwardRef(function({initialData:e,readOnly:t=!1,customMessages:n={},className:r,onFormDirty:o,idpConfig:s,mode:u="create"},c){let{t:d}=Se("idp_management.create_sso_provider.provider_configure",n),{coreClient:p}=Un(),{showCopyButtons:m}=nc(u),g=C.useMemo(()=>`https://${p?.getDomain()||"YOUR_DOMAIN"}/login/callback`,[p]),y=e,A=Cr({resolver:$r(Li("okta")),mode:Fr,reValidateMode:fo,defaultValues:{domain:y?.domain||"",client_id:y?.client_id||"",client_secret:y?.client_secret||"",icon_url:y?.icon_url||"",callback_url:y?.callback_url||g}}),{isDirty:w}=A.formState;return C.useEffect(()=>{o?.(w)},[w,o]),C.useImperativeHandle(c,()=>({validate:async()=>await A.trigger(),getData:()=>A.getValues(),isDirty:()=>A.formState.isDirty,reset:b=>{b?A.reset(b):A.reset()}})),f.jsx(Dr,{...A,children:f.jsxs("div",{className:X("space-y-6",r),children:[f.jsx(Ue,{control:A.control,name:"domain",render:({field:b,fieldState:x})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:d("fields.okta.domain.label")}),f.jsx(Qe,{children:f.jsx(Zt,{type:"text",placeholder:d("fields.okta.domain.placeholder"),error:!!x.error,readOnly:t,...b})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:f.jsx(f.Fragment,{children:d.trans("fields.okta.domain.helper_text",{components:{link:E=>f.jsx(rc,{href:gg.domain,target:"_blank",rel:"noopener noreferrer",children:E},"okta-domain-link")}})})})]})}),f.jsx(Ue,{control:A.control,name:"client_id",render:({field:b,fieldState:x})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:d("fields.okta.client_id.label")}),f.jsx(Qe,{children:f.jsx(vn,{type:"text",placeholder:d("fields.okta.client_id.placeholder"),error:!!x.error,readOnly:t,showCopyButton:m,...b})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:f.jsx(f.Fragment,{children:d.trans("fields.okta.client_id.helper_text",{components:{link:E=>f.jsx(rc,{href:gg.client_id,target:"_blank",rel:"noopener noreferrer",children:E},"okta-client-id-link")}})})})]})}),f.jsx(Ue,{control:A.control,name:"client_secret",render:({field:b,fieldState:x})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:d("fields.okta.client_secret.label")}),f.jsx(Qe,{children:f.jsx(vn,{type:"password",placeholder:d("fields.okta.client_secret.placeholder"),error:!!x.error,readOnly:t,showCopyButton:m,...b})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:f.jsx(f.Fragment,{children:d.trans("fields.okta.client_secret.helper_text",{components:{link:E=>f.jsx(rc,{href:gg.client_secret,target:"_blank",rel:"noopener noreferrer",children:E},"okta-client-secret-link")}})})})]})}),f.jsx(Ue,{control:A.control,name:"callback_url",render:({field:b,fieldState:x})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:d("fields.okta.callback_url.label")}),f.jsx(Qe,{children:f.jsx(vn,{type:"text",placeholder:d("fields.okta.callback_url.placeholder"),error:!!x.error,readOnly:!0,...b})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:d("fields.okta.callback_url.helper_text")})]})}),f.jsx(rs,{idpConfig:s,readOnly:t,customMessages:n})]})})});function vg({className:e,...t}){return f.jsx(qP,{"data-slot":"accordion",className:X("w-full space-y-2 bg-card",e),...t})}function Ag({className:e,...t}){return f.jsx(ZP,{"data-slot":"accordion-item",className:X("text-card-foreground shadow-bevel-2xl flex flex-col rounded-2xl transition-all duration-150 ease-in-out",e),...t})}function yg({className:e,children:t,...n}){return f.jsx(WP,{className:"flex",children:f.jsxs(XP,{"data-slot":"accordion-trigger",className:X("group text-foreground focus-visible:ring-ring flex w-full items-center justify-between p-6 text-sm font-medium transition-all duration-150 ease-in-out focus-visible:ring-2 focus-visible:outline-hidden disabled:cursor-not-allowed [&[data-state=open]>svg]:rotate-180",e),...n,children:[t,f.jsx(Cl,{className:"text-muted-foreground size-4 shrink-0 transition-transform duration-150"})]})})}function bg({className:e,children:t,...n}){return f.jsx($P,{"data-slot":"accordion-content",className:"data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down overflow-hidden text-sm",...n,children:f.jsx("div",{className:X("text-muted-foreground border-border animate-in fade-in-50 px-6 pb-6 min-h-10 text-sm transition-all duration-150 ease-in-out",e),children:t})})}function fu({...e}){return f.jsx(_z,{"data-slot":"select",...e})}function hu({...e}){return f.jsx(wz,{"data-slot":"select-value",...e})}function mu({className:e,size:t="default",children:n,...r}){return f.jsx(Cz,{"data-slot":"select-trigger","data-size":t,asChild:!0,...r,children:f.jsxs(Je,{variant:"outline",className:X("border-border/25 data-[placeholder]:text-primary text-input-foreground shadow-input-resting hover:shadow-input-hover hover:border-border/0 focus-within:outline-primary focus-within:shadow-input-hover bg-input disabled:bg-muted data-[state=open]:focus-within:outline-primary data-[state=open]:focus-within:shadow-input-hover [&_svg:not([class*='text-'])]:text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive flex w-full justify-between px-3 whitespace-nowrap ring-4 ring-transparent outline-4 disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center *:data-[slot=select-value]:gap-2 [&_svg]:pointer-events-none [&_svg]:shrink-0",e),children:[n,f.jsx(Ez,{asChild:!0,children:f.jsx(Cl,{className:X("text-primary size-4 transition-transform duration-200")})})]})})}function pu({className:e,children:t,position:n="popper",...r}){let o=Os();return f.jsx(Sz,{container:o,children:f.jsxs(Dz,{className:X("bg-popover text-popover-foreground animate-in fade-in-0 zoom-in-95 shadow-bevel-xl data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 max-h-[var(--radix-select-content-available-height)] min-w-[var(--radix-select-trigger-width)] overflow-hidden rounded-3xl ring-0 duration-300 ease-in-out outline-none focus:outline-none",e),position:n,side:"bottom",align:"start",sideOffset:8,"data-slot":"select-content",...r,children:[f.jsx(yI,{}),f.jsx(Fz,{className:"p-1",children:t}),f.jsx(bI,{})]})})}function gu({className:e,children:t,...n}){return f.jsxs(Rz,{"data-slot":"select-item",className:X("hover:bg-muted/50 focus:bg-muted data-[highlighted]:bg-muted/75 data-[state=checked]:bg-muted relative flex w-full items-center justify-between rounded-2xl px-2 py-1.5 text-sm outline-hidden select-none",e),...n,children:[f.jsx(Bz,{children:t}),f.jsx("span",{className:"absolute right-2 flex size-3.5 items-center justify-center",children:f.jsx(kz,{children:f.jsx(sm,{className:"text-primary size-4"})})})]})}function yI({className:e,...t}){return f.jsx(Mz,{"data-slot":"select-scroll-up-button",className:X("flex cursor-default items-center justify-center py-1",e),...t,children:f.jsx(vb,{className:"size-4"})})}function bI({className:e,...t}){return f.jsx(Nz,{"data-slot":"select-scroll-down-button",className:X("flex cursor-default items-center justify-center py-1",e),...t,children:f.jsx(Cl,{className:"size-4"})})}var xI={sign_request:"domain/pem?cert=connection"},_I=[{value:"rsa-sha1",label:"RSA-SHA1"},{value:"rsa-sha256",label:"RSA-SHA256"}],CI=[{value:"sha1",label:"SHA1"},{value:"sha256",label:"SHA256"}],PE=[".pem",".cer",".crt"],wI=C.forwardRef(function({initialData:e,readOnly:t=!1,customMessages:n={},className:r,onFormDirty:o,idpConfig:s},u){let{t:c}=Se("idp_management.create_sso_provider.provider_configure",n),[d,p]=C.useState([]),m=e,g=Cr({resolver:$r(Li("pingfederate")),mode:Fr,reValidateMode:fo,defaultValues:{pingFederateBaseUrl:m?.pingFederateBaseUrl||"",signingCert:m?.signingCert||"",signSAMLRequest:m?.signSAMLRequest||!1,signatureAlgorithm:m?.signatureAlgorithm||"rsa-sha256",digestAlgorithm:m?.digestAlgorithm||"sha256"}}),{isDirty:y}=g.formState;C.useEffect(()=>{o?.(y)},[y,o]),C.useImperativeHandle(u,()=>({validate:async()=>await g.trigger(),getData:()=>g.getValues(),isDirty:()=>g.formState.isDirty,reset:E=>{E?g.reset(E):g.reset()}}));let A=g.watch("signSAMLRequest"),w=C.useCallback(E=>{let S=E.name.toLowerCase();return PE.some(F=>S.endsWith(F))},[]),b=async E=>{p(E);let S=E[0];if(S)try{let F=await S.text();g.setValue("signingCert",F,{shouldDirty:!0,shouldValidate:!0}),g.clearErrors("signingCert")}catch(F){console.error("Error reading file:",F)}},x=E=>{E.some(S=>!w(S))&&g.setError("signingCert",{type:"manual",message:c("fields.ping-federate.sign_cert.error")})};return f.jsx(Dr,{...g,children:f.jsxs("div",{className:X("space-y-6",r),children:[f.jsx(Ue,{control:g.control,name:"pingFederateBaseUrl",render:({field:E,fieldState:S})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:c("fields.ping-federate.ping_federate_baseurl.label")}),f.jsx(Qe,{children:f.jsx(Zt,{type:"url",placeholder:c("fields.ping-federate.ping_federate_baseurl.placeholder"),error:!!S.error,readOnly:t,"aria-invalid":!!S.error,...E})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:c("fields.ping-federate.ping_federate_baseurl.helper_text")})]})}),f.jsx(Ue,{control:g.control,name:"signingCert",render:()=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:c("fields.ping-federate.sign_cert.label")}),f.jsx(Qe,{children:f.jsx("div",{className:"space-y-3",children:f.jsx(mg,{accept:PE.join(","),onChange:b,onInvalidFiles:x,value:d,maxFiles:1,disabled:t,className:"w-full",placeholder:c("fields.ping-federate.sign_cert.placeholder")})})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:c("fields.ping-federate.sign_cert.helper_text")})]})}),f.jsx(vg,{type:"single",collapsible:!0,className:"w-full",children:f.jsxs(Ag,{value:"advanced-settings",children:[f.jsx(yg,{className:"text-sm font-medium",children:c("fields.ping-federate.advanced_settings.title")}),f.jsxs(bg,{className:"space-y-6",children:[f.jsx(Ue,{control:g.control,name:"signSAMLRequest",render:({field:E})=>f.jsxs(Ve,{className:"flex flex-row items-start space-x-2 space-y-0",children:[f.jsx(Qe,{children:f.jsx(Lf,{checked:E.value||!1,onCheckedChange:E.onChange,disabled:t})}),f.jsxs("div",{className:"space-y-1 leading-none",children:[f.jsx(He,{className:"text-sm font-medium cursor-pointer",children:c("fields.ping-federate.advanced_settings.sign_request.label")}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:f.jsx(f.Fragment,{children:c.trans("fields.ping-federate.advanced_settings.sign_request.helper_text",{components:{link:S=>f.jsx(rc,{href:xI.sign_request,target:"_blank",rel:"noopener noreferrer",children:S},"ping-federate-sign-request-link")}})})})]})]})}),A&&f.jsxs(f.Fragment,{children:[f.jsx(Ue,{control:g.control,name:"signatureAlgorithm",render:({field:E})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:c("fields.ping-federate.advanced_settings.sign_request_algorithm.label")}),f.jsxs(fu,{onValueChange:E.onChange,value:E.value||"",children:[f.jsx(Qe,{children:f.jsx(mu,{children:f.jsx(hu,{placeholder:c("fields.ping-federate.advanced_settings.sign_request_algorithm.placeholder")})})}),f.jsx(pu,{children:_I.map(S=>f.jsx(gu,{value:S.value,children:S.label},S.value))})]}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"})]})}),f.jsx(Ue,{control:g.control,name:"digestAlgorithm",render:({field:E})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:c("fields.ping-federate.advanced_settings.sign_request_algorithm_digest.label")}),f.jsxs(fu,{onValueChange:E.onChange,value:E.value||"",children:[f.jsx(Qe,{children:f.jsx(mu,{children:f.jsx(hu,{placeholder:c("fields.ping-federate.advanced_settings.sign_request_algorithm_digest.placeholder")})})}),f.jsx(pu,{children:CI.map(S=>f.jsx(gu,{value:S.value,children:S.label},S.value))})]}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"})]})})]})]})]})}),f.jsx(rs,{idpConfig:s,readOnly:t,customMessages:n})]})})}),EI={sign_request:"domain/pem?cert=connection"},SI=[{value:"rsa-sha1",label:"RSA-SHA1"},{value:"rsa-sha256",label:"RSA-SHA256"}],DI=[{value:"sha1",label:"SHA1"},{value:"sha256",label:"SHA256"}],FI=[{value:"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect",label:"HTTP-Redirect"},{value:"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST",label:"HTTP-POST"}],RI=C.forwardRef(function({initialData:e,readOnly:t=!1,customMessages:n={},className:r,onFormDirty:o,idpConfig:s},u){let{t:c}=Se("idp_management.create_sso_provider.provider_configure",n),[d,p]=C.useState([]),m=e,g=Cr({resolver:$r(Li("samlp")),mode:Fr,reValidateMode:fo,defaultValues:{meta_data_source:m?.meta_data_source||"meta_data_url",metadataUrl:m?.metadataUrl||"",single_sign_on_login_url:m?.single_sign_on_login_url||"",cert:m?.cert||"",signSAMLRequest:m?.signSAMLRequest||!1,signatureAlgorithm:m?.signatureAlgorithm||"rsa-sha256",digestAlgorithm:m?.digestAlgorithm||"sha256",bindingMethod:m?.bindingMethod||"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-POST"}}),{isDirty:y}=g.formState;C.useEffect(()=>{o?.(y)},[y,o]),C.useImperativeHandle(u,()=>({validate:async()=>await g.trigger(),getData:()=>g.getValues(),isDirty:()=>g.formState.isDirty,reset:E=>{E?g.reset(E):g.reset()}}));let A=g.watch("meta_data_source"),w=A==="meta_data_file",b=g.watch("signSAMLRequest"),x=async E=>{p(E);let S=E[0];if(S)try{let F=await S.text();g.setValue("cert",F)}catch(F){console.error("Error reading file:",F)}};return f.jsx(Dr,{...g,children:f.jsxs("div",{className:X("space-y-6",r),children:[f.jsx(Ue,{control:g.control,name:"meta_data_source",render:({field:E})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:c("fields.samlp.meta_data_source.label")}),f.jsx(Qe,{children:f.jsxs(pg,{value:E.value,onValueChange:E.onChange,disabled:t,className:"flex flex-col space-y-2",children:[f.jsxs("div",{className:"flex items-center space-x-2",children:[f.jsx(du,{value:"meta_data_url",id:"meta_data_url"}),f.jsx(ea,{htmlFor:"meta_data_url",className:"text-sm font-normal cursor-pointer",children:c("fields.samlp.meta_data_source.options.meta_data_url.label")})]}),f.jsxs("div",{className:"flex items-center space-x-2",children:[f.jsx(du,{value:"meta_data_file",id:"meta_data_file"}),f.jsx(ea,{htmlFor:"meta_data_file",className:"text-sm font-normal cursor-pointer",children:c("fields.samlp.meta_data_source.options.meta_data_file.label")})]})]})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"})]})}),f.jsx(Ue,{control:g.control,name:"metadataUrl",render:({field:E,fieldState:S})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:c("fields.samlp.meta_data_url.label")}),f.jsx(Qe,{children:f.jsx(Zt,{type:"url",placeholder:c("fields.samlp.meta_data_url.placeholder"),error:!!S.error,readOnly:t,"aria-required":!0,"aria-invalid":!!S.error,...E})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:c("fields.samlp.meta_data_url.helper_text")})]})}),w&&f.jsxs(f.Fragment,{children:[f.jsx(Ue,{control:g.control,name:"single_sign_on_login_url",render:({field:E,fieldState:S})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:c("fields.samlp.single_sign_on_login_url.label")}),f.jsx(Qe,{children:f.jsx(Zt,{type:"url",placeholder:c("fields.samlp.single_sign_on_login_url.placeholder"),error:!!S.error,readOnly:t,"aria-required":!0,"aria-invalid":!!S.error,...E})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:c("fields.samlp.single_sign_on_login_url.helper_text")})]})}),f.jsx(Ue,{control:g.control,name:"cert",render:()=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:c("fields.samlp.cert.label")}),f.jsx(Qe,{children:f.jsx("div",{className:"space-y-3",children:f.jsx(mg,{accept:".pem",onChange:x,value:d,maxFiles:1,disabled:t,className:"w-full",placeholder:c("fields.samlp.cert.placeholder")})})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:c("fields.samlp.cert.helper_text")})]})})]}),f.jsx(vg,{type:"single",collapsible:!0,className:"w-full",children:f.jsxs(Ag,{value:"advanced-settings",children:[f.jsx(yg,{className:"text-sm font-medium",children:c("fields.samlp.advanced_settings.title")}),f.jsxs(bg,{className:"space-y-6",children:[f.jsx(Ue,{control:g.control,name:"signSAMLRequest",render:({field:E})=>f.jsxs(Ve,{className:"flex flex-row items-start space-x-2 space-y-0",children:[f.jsx(Qe,{children:f.jsx(Lf,{checked:E.value||!1,onCheckedChange:E.onChange,disabled:t})}),f.jsxs("div",{className:"space-y-1 leading-none",children:[f.jsx(He,{className:"text-sm font-medium cursor-pointer",children:c("fields.samlp.advanced_settings.sign_request.label")}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:f.jsx(f.Fragment,{children:c.trans(A==="meta_data_url"?"fields.samlp.advanced_settings.sign_request.helper_text_metadata_url":"fields.samlp.advanced_settings.sign_request.helper_text_metadata_file",{components:{link:S=>f.jsx(rc,{href:EI.sign_request,target:"_blank",rel:"noopener noreferrer",children:S},"samlp-sign-request-link")}})})})]})]})}),b&&f.jsxs(f.Fragment,{children:[f.jsx(Ue,{control:g.control,name:"signatureAlgorithm",render:({field:E})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:c("fields.samlp.advanced_settings.sign_request_algorithm.label")}),f.jsxs(fu,{onValueChange:E.onChange,value:E.value||"",children:[f.jsx(Qe,{children:f.jsx(mu,{children:f.jsx(hu,{placeholder:c("fields.samlp.advanced_settings.sign_request_algorithm.placeholder")})})}),f.jsx(pu,{children:SI.map(S=>f.jsx(gu,{value:S.value,children:S.label},S.value))})]}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"})]})}),f.jsx(Ue,{control:g.control,name:"digestAlgorithm",render:({field:E})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:c("fields.samlp.advanced_settings.sign_request_algorithm_digest.label")}),f.jsxs(fu,{onValueChange:E.onChange,value:E.value||"",children:[f.jsx(Qe,{children:f.jsx(mu,{children:f.jsx(hu,{placeholder:c("fields.samlp.advanced_settings.sign_request_algorithm_digest.placeholder")})})}),f.jsx(pu,{children:DI.map(S=>f.jsx(gu,{value:S.value,children:S.label},S.value))})]}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"})]})})]}),f.jsx(Ue,{control:g.control,name:"bindingMethod",render:({field:E})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:c("fields.samlp.advanced_settings.request_protocol_binding.label")}),f.jsxs(fu,{onValueChange:E.onChange,value:E.value||"",children:[f.jsx(Qe,{children:f.jsx(mu,{children:f.jsx(hu,{placeholder:c("fields.samlp.advanced_settings.request_protocol_binding.placeholder")})})}),f.jsx(pu,{children:FI.map(S=>f.jsx(gu,{value:S.value,children:S.label},S.value))})]}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"})]})})]})]})}),f.jsx(rs,{idpConfig:s,readOnly:t,customMessages:n})]})})}),BI=C.forwardRef(function({initialData:e,readOnly:t=!1,customMessages:n={},className:r,onFormDirty:o,idpConfig:s,mode:u="create"},c){let{t:d}=Se("idp_management.create_sso_provider.provider_configure",n),{coreClient:p}=Un(),{showCopyButtons:m}=nc(u),g=C.useMemo(()=>`https://${p?.getDomain()||"YOUR_DOMAIN"}/login/callback`,[p]),y=e,A=Cr({resolver:$r(Li("waad")),mode:Fr,reValidateMode:fo,defaultValues:{tenant_domain:y?.tenant_domain||"",client_id:y?.client_id||"",client_secret:y?.client_secret||"",callback_url:y?.callback_url||g}}),{isDirty:w}=A.formState;return C.useEffect(()=>{o?.(w)},[w,o]),C.useImperativeHandle(c,()=>({validate:async()=>await A.trigger(),getData:()=>A.getValues(),isDirty:()=>A.formState.isDirty,reset:b=>{b?A.reset(b):A.reset()}})),f.jsx(Dr,{...A,children:f.jsxs("div",{className:X("space-y-6",r),children:[f.jsx(Ue,{control:A.control,name:"tenant_domain",render:({field:b,fieldState:x})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:d("fields.waad.tenant_domain.label")}),f.jsx(Qe,{children:f.jsx(Zt,{type:"text",placeholder:d("fields.waad.tenant_domain.placeholder"),error:!!x.error,readOnly:t,...b})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"})]})}),f.jsx(Ue,{control:A.control,name:"client_id",render:({field:b,fieldState:x})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:d("fields.waad.client_id.label")}),f.jsx(Qe,{children:f.jsx(vn,{type:"text",placeholder:d("fields.waad.client_id.placeholder"),error:!!x.error,readOnly:t,showCopyButton:m,...b})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:d("fields.waad.client_id.helper_text")})]})}),f.jsx(Ue,{control:A.control,name:"client_secret",render:({field:b,fieldState:x})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:d("fields.waad.client_secret.label")}),f.jsx(Qe,{children:f.jsx(vn,{type:"password",placeholder:d("fields.waad.client_secret.placeholder"),error:!!x.error,readOnly:t,showCopyButton:m,...b})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:d("fields.waad.client_secret.helper_text")})]})}),f.jsx(Ue,{control:A.control,name:"callback_url",render:({field:b,fieldState:x})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm font-medium text-(length:--font-size-label)",children:d("fields.waad.callback_url.label")}),f.jsx(Qe,{children:f.jsx(vn,{type:"text",placeholder:d("fields.waad.callback_url.placeholder"),error:!!x.error,readOnly:!0,...b})}),f.jsx(We,{role:"alert",className:"text-sm text-left text-(length:--font-size-paragraph)"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:d("fields.waad.callback_url.helper_text")})]})}),f.jsx(rs,{idpConfig:s,readOnly:t,customMessages:n})]})})}),zE=C.forwardRef(function({strategy:e,className:t,...n},r){let o=()=>{switch(e){case St.OKTA:return f.jsx(AI,{ref:r,...n});case St.GOOGLE_APPS:return f.jsx(pI,{ref:r,...n});case St.WAAD:return f.jsx(BI,{ref:r,...n});case St.PINGFEDERATE:return f.jsx(wI,{ref:r,...n});case St.ADFS:return f.jsx(mI,{ref:r,...n});case St.SAMLP:return f.jsx(RI,{ref:r,...n});case St.OIDC:return f.jsx(gI,{ref:r,...n});default:return null}};return f.jsx("div",{className:X("space-y-6",t),children:o()})}),kI=Oo("hover:bg-muted hover:text-muted-foreground data-[state=on]:bg-accent data-[state=on]:text-accent-foreground focus-visible:border-ring aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive theme-default:shadow-bevel-sm focus-visible:ring-ring inline-flex items-center justify-center gap-2 rounded-xl text-sm font-medium whitespace-nowrap transition-[color,box-shadow] outline-none focus-visible:ring-3 focus-visible:outline-hidden disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",{variants:{variant:{default:"hover:bg-muted data-[state=on]:bg-muted data-[state=on]:text-primary bg-transparent",outline:"data-[state=on]:bg-muted data-[state=on]:text-primary-foreground hover:bg-accent hover:text-accent-foreground shadow-input-resting bg-transparent"},size:{default:"h-9 min-w-9 px-2",sm:"h-8 min-w-8 px-1.5",lg:"h-10 min-w-10 px-2.5"}},defaultVariants:{variant:"default",size:"default"}});function MI({className:e,children:t,pressed:n,onPressedChange:r,variant:o="default",size:s="default",...u}){return f.jsx("button",{type:"button","aria-pressed":n,"data-state":n?"on":"off","data-variant":o,onClick:()=>r?.(!n),className:X(kI({variant:o,size:s}),e),...u,children:t})}function NI(e){return f.jsx(MI,{...e})}var TI=({icon:e,className:t,label:n,onClick:r,disabled:o,variant:s,size:u})=>f.jsxs(Je,{onClick:r,disabled:o,variant:s,size:u,className:X("flex items-center gap-2 w-full sm:w-auto sm:min-w-fit",t),"aria-label":n,children:[e&&f.jsx(e,{className:"h-4 w-4 flex-shrink-0","aria-hidden":"true"}),f.jsx("span",{className:"truncate",children:n})]}),jI=({icon:e,className:t,label:n,"aria-label":r,pressed:o,onPressedChange:s,disabled:u,variant:c,size:d})=>f.jsxs(NI,{pressed:o,onPressedChange:s,disabled:u,variant:c==="outline"?"outline":"default",size:d==="icon"||d==="xs"?"sm":d,className:X("flex items-center gap-2",t),"aria-label":r,children:[e&&f.jsx(e,{className:"h-4 w-4 flex-shrink-0","aria-hidden":"true"}),n&&f.jsx("span",{className:"truncate",children:n})]});function vu({title:e,description:t,children:n,actions:r,className:o}){let s=(u,c)=>{let d=`action-${c}`;return u.type==="toggle"?f.jsx(jI,{...u},d):f.jsx(TI,{...u},d)};return f.jsxs("div",{className:X("space-y-6",o),children:[f.jsxs("div",{className:"flex items-start justify-between gap-4",children:[f.jsxs("div",{className:"flex flex-col min-w-0 flex-1 space-y-2",children:[e&&f.jsx("h3",{className:X("text-lg text-foreground text-(length:--font-size-subtitle) font-semibold mb-1 text-left"),children:e}),t&&f.jsx("p",{className:X("text-sm text-muted-foreground text-left text-(length:--font-size-paragraph)"),children:t})]}),r&&r.length>0&&f.jsx("div",{className:"flex-shrink-0 flex items-start gap-2 mt-1",children:r.map(s)})]}),f.jsx("div",{className:"space-y-6",children:n})]})}var LE=C.forwardRef(function({initialData:e,mode:t,readOnly:n=!1,customMessages:r={},className:o,onFormDirty:s},u){let{t:c}=Se("idp_management.create_sso_provider.provider_details",r),d=Cr({resolver:$r(tm()),mode:Fr,reValidateMode:fo,defaultValues:{name:e?.name||"",display_name:e?.display_name||""}}),{isDirty:p}=d.formState;return C.useEffect(()=>{s?.(p)},[p,s]),C.useImperativeHandle(u,()=>({validate:async()=>await d.trigger(),getData:()=>d.getValues(),isDirty:()=>d.formState.isDirty,reset:m=>{m?d.reset(m):d.reset()}})),f.jsx(Dr,{...d,children:f.jsx("div",{className:o,children:f.jsxs(vu,{title:c("title"),description:c("description"),children:[f.jsx(Ue,{control:d.control,name:"name",render:({field:m,fieldState:g})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm text-(length:--font-size-label) font-medium",children:c("fields.name.label")}),f.jsx(Qe,{children:f.jsx(Zt,{placeholder:c("fields.name.placeholder"),error:!!g.error,readOnly:t==="edit"?!0:n,...m})}),f.jsx(We,{className:"text-left text-sm text-(length:--font-size-paragraph)",role:"alert"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:c("fields.name.helper_text")})]})}),f.jsx(Ue,{control:d.control,name:"display_name",render:({field:m,fieldState:g})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm text-(length:--font-size-label) font-medium",children:c("fields.display_name.label")}),f.jsx(Qe,{children:f.jsx(Zt,{placeholder:c("fields.display_name.placeholder"),error:!!g.error,readOnly:n,...m})}),f.jsx(We,{className:"text-left text-sm text-(length:--font-size-paragraph)",role:"alert"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:c("fields.display_name.helper_text")})]})})]})})})});function OE({title:e,description:t,card:n,content:r,className:o,expanded:s=!0}){return f.jsx("div",{className:X("w-full space-y-6",o),children:f.jsxs(vu,{title:e,description:t,children:[r,f.jsx(vg,{type:"single",defaultValue:s?"mapping-section":void 0,collapsible:!0,className:"w-full space-y-6",children:f.jsxs(Ag,{value:"mapping-section",children:[f.jsx(yg,{className:"py-4",children:f.jsxs("div",{className:"text-left",children:[f.jsx(iu,{className:"text-sm font-medium",children:n.title}),f.jsx(su,{className:"text-sm font-normal",children:n.description})]})}),f.jsx(bg,{className:"pb-6",children:f.jsx(tc,{data:n.table.items,columns:n.table.columns})})]})})]})})}var PI="urn:ietf:params:scim:schemas:core:2.0:User",Au={UPDATED:"updated",REMOVED:"removed",NEW:"new"},zI={[Au.UPDATED]:"info",[Au.REMOVED]:"warning",[Au.NEW]:"default"},LI=e=>{let{is_extra:t,is_missing:n}=e;return t&&n?Au.UPDATED:t?Au.REMOVED:n?Au.NEW:null},OI=({item:e,section:t,t:n})=>{let r=LI(e);return f.jsxs("div",{className:"flex items-center gap-2 min-w-0",children:[f.jsx("span",{className:"truncate text-sm font-medium",children:e.label}),e.description&&f.jsxs(Ha,{children:[f.jsx(Qa,{asChild:!0,children:f.jsx(PB,{className:"h-4 w-4 text-muted-foreground shrink-0 cursor-help","aria-hidden":"true"})}),f.jsx(Ca,{side:"top",className:"max-w-xs",children:e.description})]}),r&&f.jsxs(Ha,{children:[f.jsx(Qa,{asChild:!0,children:f.jsx(Ji,{variant:zI[r],size:"sm",className:"shrink-0 uppercase tracking-tight cursor-help",children:n(`mappings.${t}.table.tags.${r}.label`)})}),f.jsx(Ca,{side:"top",className:"max-w-xs",children:n(`mappings.${t}.table.tags.${r}.tooltip`)})]})]})};function IE({userAttributeMap:e=[],strategy:t,isProvisioning:n=!1,customMessages:r,className:o}){let{t:s}=Se("idp_management.edit_sso_provider",r),u=C.useMemo(()=>t?Jh[t]||t:"",[t]),{requiredItems:c,optionalItems:d}=C.useMemo(()=>{let m=[],g=[];return e?.forEach(y=>{y.is_required?m.push(y):g.push(y)}),{requiredItems:m,optionalItems:g}},[e]),p=C.useCallback(m=>[{accessorKey:"label",type:"text",width:"30%",title:s(`mappings.${m}.table.columns.attribute_name_label`),render:g=>f.jsx(OI,{item:g,section:m,t:s})},{accessorKey:n?"provisioning_field":"user_attribute",type:"copy",width:"70%",title:s(`mappings.${m}.table.columns.external_field_label`)}],[s,n]);return f.jsxs("div",{className:o,children:[f.jsx(OE,{title:s("mappings.title"),description:s(n?"mappings.description":"mappings.description_provider_tab"),expanded:!0,card:{title:s("mappings.required.title"),description:s("mappings.required.description",{strategy:u}),table:{items:c,columns:p("required")}},content:n?f.jsxs("div",{className:"space-y-1.5 pt-2",children:[f.jsx(ea,{className:"text-sm font-medium",children:s("mappings.external_namespace.label")}),f.jsx(vn,{value:PI,readOnly:!0})]}):null}),d.length>0&&f.jsx(OE,{expanded:!0,card:{title:s("mappings.optional.title"),description:s("mappings.optional.description"),table:{items:d,columns:p("optional")}},content:null})]})}function II({provider:e,readOnly:t=!1,idpConfig:n,formActions:r,customMessages:o={},styling:s={variables:{common:{},light:{},dark:{}},classes:{}}}){let{t:u}=Se("idp_management.sso_provider_details",o),{isDarkMode:c}=en(),d=Y.useRef(null),p=Y.useRef(null),[m,g]=Y.useState(!1),[y,A]=Y.useState(!1),w=Y.useMemo(()=>cn(s,c),[s,c]),b=Y.useMemo(()=>{if(e)return{name:e.name??void 0,display_name:e.display_name??void 0}},[e]),x=Y.useMemo(()=>e&&"attributes"in e?e.attributes??null:null,[e]),E=m||y,S=async()=>{if(!r?.nextAction?.onClick||!e?.strategy)return;let F=await d.current?.validate(),R=await p.current?.validate();if(!F||!R)return;let k=d.current?.getData(),B=p.current?.getData(),N={strategy:e.strategy,...k,...B};await r.nextAction.onClick(N),d.current?.reset(k),p.current?.reset(B),g(!1),A(!1)};return e?f.jsxs("div",{style:w.variables,className:X("space-y-8"),children:[f.jsx("div",{className:"space-y-4",children:f.jsx(LE,{mode:"edit",ref:d,initialData:b,readOnly:t,customMessages:o.details_fields,className:w.classes?.["ProviderDetails-root"],hideHeader:!0,onFormDirty:g})}),f.jsx("div",{className:"space-y-4",children:f.jsx(zE,{ref:p,strategy:e.strategy,initialData:e.options,readOnly:t,idpConfig:n,mode:"edit",customMessages:o.configure_fields,className:w.classes?.["ProviderConfigure-root"],onFormDirty:A})}),f.jsx(ou,{}),f.jsx("div",{className:"space-y-4",children:f.jsx(IE,{strategy:e?.strategy||null,userAttributeMap:x,customMessages:o.mappings,className:w.classes?.["SsoProvider-attributeMapping"]})}),r&&f.jsx(Pf,{hasUnsavedChanges:E,showUnsavedChanges:!0,isLoading:r.isLoading,nextAction:{label:u("submit_button_label"),disabled:!E||r?.nextAction?.disabled||r.isLoading||t,type:"button",onClick:S},showPrevious:!1,align:r?.align,className:w.classes?.["SsoProviderDetails-FormActions"]})]}):null}function UE({className:e,isOpen:t,onClose:n,provider:r,organizationName:o,onRemove:s,isLoading:u=!1,customMessages:c={}}){let{t:d}=Se("idp_management.remove_sso_provider",c),[p,m]=C.useState(""),g=C.useCallback(w=>{m(w)},[]),y=C.useCallback(async()=>{r&&(await s(r),n())},[s,r,n]),A=C.useCallback(w=>{w||n()},[n]);return C.useEffect(()=>{t&&m("")},[t]),f.jsx(Ga,{open:t,onOpenChange:A,className:X("p-10",e),title:d("modal.title",{providerName:r.name,organizationName:o}),content:f.jsxs("div",{className:"space-y-6",children:[f.jsx("p",{className:X("text-sm text-muted-foreground text-(length:--font-size-paragraph)"),children:f.jsx(f.Fragment,{children:d.trans("modal.description",{components:{bold:w=>f.jsx("strong",{children:w},"provider-name")},vars:{providerName:r.name}})})}),f.jsx(NE,{onChange:g,customMessages:c.modal?.content})]}),modalActions:{isLoading:u,nextAction:{type:"button",label:d("modal.actions.remove_button_text"),onClick:y,variant:"destructive",disabled:u||p!==r.name},previousAction:{label:d("modal.actions.cancel_button_text"),onClick:n}}})}function UI({provider:e,organizationName:t,onRemove:n,customMessages:r={},isLoading:o,readOnly:s}){let{t:u}=Se("idp_management.remove_sso_provider",r),[c,d]=C.useState(!1),p=C.useCallback(()=>{d(!0)},[]),m=C.useCallback(()=>{d(!1)},[]);return f.jsxs(f.Fragment,{children:[f.jsx("div",{className:X("w-full"),children:f.jsx(Sr,{className:"p-6",children:f.jsxs(Va,{className:"flex items-start justify-between gap-6 p-0",children:[f.jsxs("div",{className:"flex-1 space-y-2",children:[f.jsx("h3",{className:X("text-lg font-semibold text-left text-(length:--font-size-subtitle)"),children:u("title",{providerName:e.name,organizationName:t})}),f.jsx("p",{className:X("text-sm text-muted-foreground text-left text-(length:--font-size-paragraph)"),children:u("description",{providerName:e.name})})]}),f.jsx(Je,{variant:"destructive",onClick:p,disabled:s,className:"shrink-0",children:u("remove_button_label")})]})})}),f.jsx(UE,{isOpen:c,onClose:m,provider:e,organizationName:t,onRemove:n,isLoading:o,customMessages:r.modal})]})}function VI({customMessages:e={},styling:t={variables:{common:{},light:{},dark:{}},classes:{}},readOnly:n=!1,provider:r,onDelete:o,onRemove:s,organization:u,isDeleting:c,isRemoving:d,idpConfig:p,shouldAllowDeletion:m,formActions:g,hasSsoAttributeSyncWarning:y,onAttributeSync:A,isSyncingAttributes:w=!1}){let{t:b}=Se("idp_management.edit_sso_provider.tabs.sso",e),{isDarkMode:x}=en(),E=Y.useMemo(()=>cn(t,x),[t,x]);return f.jsxs("div",{style:E.variables,className:"space-y-10",children:[y&&f.jsx(jE,{onSync:A,isSyncing:w,customMessages:e.attribute_sync_alert,className:E.classes?.["SsoProviderAttributeSyncAlert-root"]}),f.jsxs(Sr,{children:[f.jsx(sg,{className:"flex flex-row items-center justify-between space-y-0 pb-2",children:f.jsxs("div",{className:"space-y-1",children:[f.jsx(iu,{className:"text-lg text-left font-medium",children:b("content.title")}),f.jsx(su,{className:"text-sm text-left text-muted-foreground",children:b("content.description")})]})}),f.jsx(Va,{children:r&&f.jsx(II,{provider:r,readOnly:n,formActions:g,customMessages:e.details,styling:t,idpConfig:p})})]}),f.jsxs("div",{className:"space-y-4",children:[r&&u&&f.jsx(UI,{provider:r,organizationName:u?.name,onRemove:s,isLoading:d,readOnly:n,customMessages:e.remove}),r&&m&&f.jsx(hI,{provider:r,onDelete:o,isLoading:c,readOnly:n,customMessages:e.delete})]})]})}function HI({open:e,onOpenChange:t,onConfirm:n,isLoading:r,customMessages:o}){let{t:s}=Se("idp_management.edit_sso_provider.tabs.provisioning.content.delete",o);return f.jsx(Ga,{open:e,onOpenChange:t,title:s("modal.title"),content:f.jsx("div",{className:X("space-y-4"),children:f.jsx("p",{className:X("text-sm text-muted-foreground text-(length:--font-size-paragraph)"),children:s("modal.content.description")})}),modalActions:{isLoading:r,showUnsavedChanges:!1,previousAction:{type:"button",label:s("modal.actions.cancel_button_label"),variant:"outline",disabled:r,onClick:()=>t(!1)},nextAction:{type:"button",label:s("modal.actions.delete_button_label"),variant:"destructive",disabled:r,onClick:n}}})}function QI({token:e,tokenId:t,customMessages:n={},className:r}){let{t:o}=Se("idp_management.edit_sso_provider.tabs.provisioning.content.details.manage_tokens.create_modal.content",n);return f.jsxs("div",{className:X("space-y-4",r),children:[f.jsx("p",{className:X("text-sm text-muted-foreground text-(length:--font-size-paragraph)"),children:o("description")}),f.jsxs("div",{className:"space-y-2",children:[f.jsxs(ea,{htmlFor:"provisioning-token",className:"text-sm font-medium text-foreground",children:[o("field.label")," ",t]}),f.jsx(vn,{id:"provisioning-token",type:"text",value:e,readOnly:!0,className:"w-full","aria-label":`${o("field.label")} ${t}`})]})]})}function GI({open:e,onOpenChange:t,createdToken:n,isLoading:r,customMessages:o={}}){let{t:s}=Se("idp_management.edit_sso_provider.tabs.provisioning.content.details.manage_tokens",o);return f.jsx(Ga,{open:e,onOpenChange:t,title:s("create_modal.title"),content:n&&f.jsx(QI,{token:n.token,tokenId:n.token_id,customMessages:o.content}),modalActions:{isLoading:r,showPrevious:!1,showUnsavedChanges:!1,nextAction:{type:"button",label:s("create_modal.copy_and_close_button_label"),variant:"primary",icon:f.jsx(um,{className:"w-4 h-4"}),disabled:r,onClick:()=>{n&&navigator.clipboard.writeText(n.token),t(!1)}}}})}function YI({customMessages:e={},className:t,tokenId:n}){let{t:r}=Se("idp_management.edit_sso_provider.tabs.provisioning.content.details.manage_tokens.delete_modal.content",e);return f.jsxs("div",{className:X("space-y-4",t),children:[f.jsx("p",{className:X("text-sm text-muted-foreground text-(length:--font-size-paragraph)"),children:r("confirmation",{tokenId:n})}),f.jsx("p",{className:X("text-sm text-muted-foreground text-(length:--font-size-paragraph)"),children:r("description")})]})}function KI({open:e,onOpenChange:t,tokenId:n,onConfirm:r,isLoading:o,customMessages:s}){let{t:u}=Se("idp_management.edit_sso_provider.tabs.provisioning.content.details.manage_tokens",s);return f.jsx(Ga,{open:e,onOpenChange:t,title:u("delete_modal.title",{tokenId:n||""}),content:f.jsx(YI,{tokenId:n||"",customMessages:s?.content}),modalActions:{isLoading:o,showUnsavedChanges:!1,previousAction:{type:"button",label:u("delete_modal.cancel_button_label"),variant:"outline",disabled:o,onClick:()=>t(!1)},nextAction:{type:"button",label:u("delete_modal.delete_button_label"),variant:"destructive",disabled:o,onClick:r}}})}var qI=2,xg={ACTIVE:"active",EXPIRED:"expired"};function ZI({isScimTokensLoading:e,isScimTokenCreating:t,isScimTokenDeleting:n,onListScimTokens:r,onCreateScimToken:o,onDeleteScimToken:s,styling:u={variables:{common:{},light:{},dark:{}},classes:{}},customMessages:c={}}){let{t:d}=Se("idp_management.edit_sso_provider.tabs.provisioning.content.details.manage_tokens",c),{isDarkMode:p}=en(),[m,g]=C.useState(null),[y,A]=C.useState(!1),[w,b]=C.useState([]),[x,E]=C.useState(null);C.useEffect(()=>{(async()=>{let U=await r();U?.scim_tokens&&b(U.scim_tokens)})()},[]);let S=C.useMemo(()=>cn(u,p),[u,p]),F=w.length{if(!U.valid_until)return{labelKey:xg.ACTIVE,variant:"secondary"};let Q=new Date(U.valid_until){let U=await o({token_lifetime:3600});if(U){E(U),A(!0);let Q=await r();Q?.scim_tokens&&b(Q.scim_tokens)}},B=U=>{g(U)},N=async()=>{if(m){await s(m),g(null);let U=await r();U?.scim_tokens&&b(U.scim_tokens)}},P=()=>{E(null),A(!1)};return f.jsxs("div",{className:X("w-full",S.classes?.["ProvisioningManageToken-root"]),style:S?.variables,children:[f.jsxs(Sr,{className:X(S.classes?.["ProvisioningManageToken-card"]),children:[f.jsxs(sg,{className:X(S.classes?.["ProvisioningManageToken-header"]),children:[f.jsx(iu,{className:"text-base font-medium text-foreground text-left",children:d("title")}),f.jsx(su,{className:"text-sm text-muted-foreground text-left",children:d("description")}),f.jsx(oE,{children:f.jsxs(Ha,{children:[f.jsx(Qa,{asChild:!0,children:f.jsx("span",{children:f.jsxs(Je,{type:"button",onClick:k,disabled:!F||t,title:void 0,children:[t?f.jsx(dn,{className:"w-4 h-4 mr-2"}):f.jsx(Ad,{className:"w-4 h-4 mr-2","aria-hidden":"true"}),d("generate_button_label")]})})}),!F&&f.jsx(Ca,{children:d("max_tokens_tooltip")})]})})]}),e?f.jsx(Va,{className:"flex justify-center py-8",children:f.jsx(dn,{})}):w.length>0?f.jsx(Va,{className:"space-y-4",children:w.map(U=>{let Q=R(U),$=!U.valid_until;return f.jsxs("div",{className:"flex items-start justify-between gap-6",children:[f.jsxs("div",{className:"flex-1 min-w-0 space-y-1 text-left",children:[f.jsxs("p",{className:"text-sm font-medium text-foreground",children:[d("token_item.token_prefix")," ",U.token_id]}),$&&f.jsx("p",{className:"text-sm text-muted-foreground",children:d("token_item.never_expire")}),f.jsx("p",{className:"text-sm text-muted-foreground",children:d("token_item.last_used")})]}),f.jsxs("div",{className:"flex items-center gap-4 shrink-0",children:[f.jsx(Ji,{variant:Q.variant,className:"shrink-0",children:d(`token_item.status_${Q.labelKey}`)}),f.jsxs(Je,{variant:"destructive",size:"default",type:"button",onClick:()=>B(U.token_id),disabled:n,"aria-label":`${d("token_item.delete_button_label")} ${U.token_id}`,className:"shrink-0",children:[n?f.jsx(dn,{className:"w-4 h-4 mr-2"}):f.jsx(wl,{className:"w-4 h-4 mr-2","aria-hidden":"true"}),d("token_item.delete_button_label")]})]})]},U.token_id)})}):null]}),f.jsx(GI,{open:y,isLoading:t,onOpenChange:U=>{A(U),U||P()},createdToken:x,customMessages:c,styling:u}),f.jsx(KI,{open:!!m,isLoading:n,onOpenChange:U=>{U||g(null)},tokenId:m,onConfirm:N,customMessages:c,styling:u})]})}function WI({provider:e,provisioningConfig:t,isScimTokensLoading:n,isScimTokenCreating:r,isScimTokenDeleting:o,onListScimTokens:s,onCreateScimToken:u,onDeleteScimToken:c,customMessages:d={},styling:p={variables:{common:{},light:{},dark:{}},classes:{}}}){let{t:m}=Se("idp_management.edit_sso_provider.tabs.provisioning.content.details",d),{isDarkMode:g}=en(),y=C.useMemo(()=>cn(p,g),[p,g]),{coreClient:A}=Un(),w=C.useMemo(()=>`https://${A?.getDomain()||"your-domain"}/scim/v2/connections/${e.id}/`,[A,e.id]),b=Cr({resolver:$r(f7),mode:Fr,defaultValues:{userIdAttribute:t?.user_id_attribute||"",scimEndpointUrl:w||""}});return f.jsxs("div",{style:y.variables,className:X("space-y-6",y.classes?.["SsoProvisioningDetails-root"]),children:[f.jsx(Dr,{...b,children:f.jsxs("form",{className:"space-y-6",children:[f.jsx(Ue,{control:b.control,name:"userIdAttribute",render:({field:x,fieldState:E})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm text-(length:--font-size-label) font-medium",children:m("fields.user_id_attribute.label")}),f.jsx(Qe,{children:f.jsx(Zt,{readOnly:!0,error:!!E.error,...x})}),f.jsx(We,{className:"text-left text-sm text-(length:--font-size-paragraph)",role:"alert"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:m("fields.user_id_attribute.helper_text")})]})}),f.jsx(ZI,{isScimTokensLoading:n,isScimTokenCreating:r,isScimTokenDeleting:o,onListScimTokens:s,onCreateScimToken:u,onDeleteScimToken:c,customMessages:d?.manage_tokens,styling:p}),f.jsx(Ue,{control:b.control,name:"scimEndpointUrl",render:({field:x,fieldState:E})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm text-(length:--font-size-label) font-medium",children:m("fields.scim_endpoint_url.label")}),f.jsx(Qe,{children:f.jsx(vn,{error:!!E.error,readOnly:!0,...x})}),f.jsx(We,{className:"text-left text-sm text-(length:--font-size-paragraph)",role:"alert"})]})})]})}),f.jsx(ou,{}),f.jsx(IE,{strategy:t?.strategy||null,isProvisioning:!0,userAttributeMap:t?.attributes||null,customMessages:d.mappings,className:y.classes?.["SsoProvisioning-attributeMapping"]})]})}function XI({provider:e,styling:t={variables:{common:{},light:{},dark:{}},classes:{}},customMessages:n={},hasProvisioningAttributeSyncWarning:r,onAttributeSync:o,isSyncingAttributes:s=!1}){let{t:u}=Se("idp_management.edit_sso_provider.tabs.provisioning.content",n),{provisioningConfig:c,isProvisioningLoading:d,isProvisioningUpdating:p,isProvisioningDeleting:m,isScimTokensLoading:g,isScimTokenCreating:y,isScimTokenDeleting:A,fetchProvisioning:w,createProvisioning:b,deleteProvisioning:x,listScimTokens:E,createScimToken:S,deleteScimToken:F}=hg(e?.id||""),{isDarkMode:R}=en(),k=C.useMemo(()=>cn(t,R),[t,R]),[B,N]=C.useState(!1);C.useEffect(()=>{e?.id&&w()},[e?.id]);let P=async V=>{e?.id&&(V?(await b(),await w()):N(!0))},U=async()=>{await x(),N(!1)},Q=d||p||m,$=!!c,q=Q||!e?.id||!e.is_enabled;return f.jsxs("div",{style:k.variables,className:X("space-y-10",k.classes?.["SsoProvisioningTab-root"]),children:[r&&f.jsx(jE,{translatorKey:"idp_management.edit_sso_provider.tabs.provisioning.content.attribute_sync_alert",onSync:o,isSyncing:s,customMessages:n.attribute_sync_alert,className:k.classes?.["SsoProviderAttributeSyncAlert-root"]}),f.jsxs(Sr,{children:[f.jsxs(sg,{children:[f.jsx(iu,{className:"text-lg font-medium text-foreground text-left",children:u("header.title")}),f.jsx(su,{className:"text-sm text-muted-foreground text-left",children:u("header.description")}),f.jsx(oE,{children:f.jsx("div",{className:"flex items-center gap-3",children:f.jsx("div",{className:"flex items-center gap-2",children:Q?f.jsx(dn,{className:"w-4 h-4"}):f.jsxs(Ha,{children:[f.jsx(Qa,{asChild:!0,children:f.jsx("span",{children:f.jsx(lu,{checked:$,onCheckedChange:P,disabled:q})})}),f.jsx(Ca,{children:e.is_enabled?u($?"header.disable_provisioning_tooltip":"header.enable_provisioning_tooltip"):u("header.provider_disabled_tooltip")})]})})})})]}),f.jsx(Va,{children:$&&f.jsx(WI,{provider:e,provisioningConfig:c,isScimTokensLoading:g,isScimTokenCreating:y,isScimTokenDeleting:A,onListScimTokens:E,onCreateScimToken:S,onDeleteScimToken:F,customMessages:n.details,styling:t})})]}),f.jsx(HI,{open:B,isLoading:m,onOpenChange:N,onConfirm:U,customMessages:n.delete})]})}function $I({onRetry:e,isMfa:t}){let{t:n}=Se("gate_keeper"),r=t?"mfa_error":"fallback";return f.jsxs(Sr,{className:"text-center",children:[f.jsxs(Va,{className:"flex flex-col items-center gap-2",children:[f.jsx(iu,{children:n(`${r}.title`)}),f.jsx(su,{children:n(`${r}.description`)})]}),!t&&f.jsx(bO,{className:"justify-center",children:f.jsxs(Je,{variant:"primary",size:"default",onClick:e,children:[f.jsx(bb,{className:"size-4"}),n("fallback.retry")]})})]})}function ac({styling:e,isLoading:t,children:n}){let{error:r,onRetry:o}=D2(),{coreClient:s}=Un(),{isDarkMode:u}=en(),[c,d]=C.useState(!1),p=C.useMemo(()=>cn(e,u),[e,u]),m=C.useCallback(async()=>{d(!0);try{await o?.()}finally{d(!1)}},[o]),g=bl(r),y=Ts(r),A=!!r&&!!y&&y>=500;return C.useEffect(()=>{g&&s&&!s.isProxyMode()&&console.warn(`🚨 [Auth0 Components Warning]: A step-up authentication (MFA) was triggered, but the interactiveErrorHandler is not configured. + +To enable Universal Login redirects for MFA step-up, login required, or consent errors, please update your configuration: + + + +For more details, refer to the Auth0 Documentation.`)},[g,s]),t||c?f.jsx(ja,{style:p.variables,children:f.jsx("div",{className:"flex items-center justify-center p-8",children:f.jsx(dn,{})})}):A||g?f.jsx(ja,{style:p.variables,children:f.jsx($I,{onRetry:m,isMfa:g})}):f.jsx(ja,{style:p.variables,children:n})}function JI({className:e,...t}){return f.jsx(Pz,{"data-slot":"tabs",className:X("flex flex-col gap-2",e),...t})}function eU({className:e,...t}){return f.jsx(zz,{"data-slot":"tabs-list",className:X("bg-muted shadow-switch-resting text-muted-foreground inline-flex h-9 w-fit items-center justify-center gap-0.5 rounded-2xl p-0.5",e),...t})}function _g({className:e,...t}){return f.jsx(Lz,{"data-slot":"tabs-trigger",className:X("data-[state=active]:bg-background hover:bg-accent/25 dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:bg-input text-foreground dark:text-muted-foreground data-[state=active]:shadow-bevel-sm inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center gap-1.5 rounded-xl px-4 py-0.5 text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 active:scale-[0.99] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...t})}function Cg({className:e,...t}){return f.jsx(Oz,{"data-slot":"tabs-content",className:X("flex-1 outline-none",e),...t})}var wg={all:["config"],details:()=>[...wg.all,"details"]};function Of(){let{coreClient:e}=Un(),t=Ua(),n=ya({queryKey:wg.details(),queryFn:()=>e.getMyOrganizationApiClient().organization.configuration.get(),enabled:!!e,retry:(d,p)=>zi(p)&&p.body?.status===404?!1:d<3}),r=n.data,o=r?.allowed_strategies,s=o?$h.filter(d=>o.includes(d)):$h,u=r?.connection_deletion_behavior==="allow"||r?.connection_deletion_behavior==="allow_if_empty",c=!!o?.length;return{config:r??null,isLoadingConfig:n.isLoading,fetchConfig:async()=>await t.getQueryData(wg.details()),filteredStrategies:s,shouldAllowDeletion:u,isConfigValid:c,allowedRoles:[]}}var Eg={all:["idp-config"],config:()=>[...Eg.all,"config"]},tU={adfs:"adfs","google-apps":"googleapps",oidc:"oidc",okta:"okta",pingfederate:"pingfederate",samlp:"samlp",waad:"waad"};function If(){let{coreClient:e}=Un(),t=Ua(),n=ya({queryKey:Eg.config(),queryFn:async()=>{try{return await e.getMyOrganizationApiClient().organization.configuration.identityProviders.get()}catch(d){if(zi(d)&&d.body?.status===404)return null;throw d}},enabled:!!e,retry:(d,p)=>zi(p)&&p.body?.status===404?!1:d<3}),r=n.data??null,o=r?.strategies,s=d=>{if(!d||!o)return;let p=tU[d];return o[p]},u=d=>s(d)?.enabled_features.includes("provisioning")??!1,c=d=>s(d)?.provisioning_methods.includes("scim")??!1;return{idpConfig:r,isIdpConfigValid:!!o&&Object.keys(o).length>0,isLoadingIdpConfig:n.isLoading,fetchIdpConfig:async()=>await t.getQueryData(Eg.config()),isProvisioningEnabled:u,isProvisioningMethodEnabled:c}}function nU(e){let{shouldAllowDeletion:t,isLoadingConfig:n}=Of(),{idpConfig:r,isLoadingIdpConfig:o,isProvisioningEnabled:s,isProvisioningMethodEnabled:u}=If(),c=s(e.provider?.strategy)&&u(e.provider?.strategy),d=C.useCallback(async p=>{e.provider?.strategy&&await e.updateProvider({strategy:e.provider.strategy,is_enabled:p})},[e.provider?.strategy,e.updateProvider]);return{shouldAllowDeletion:t,isLoadingConfig:n,idpConfig:r,isLoadingIdpConfig:o,showProvisioningTab:c,handleToggleProvider:d}}function rU(e){let{providerId:t,backButton:n,sso:r,provisioning:o,domains:s,hideHeader:u=!1,customMessages:c={},styling:d={variables:{common:{},light:{},dark:{}},classes:{}},schema:p,readOnly:m=!1}=e,g=hg(t,{sso:r,provisioning:o,customMessages:c}),y=nU(g),A={...g,shouldAllowDeletion:y.shouldAllowDeletion,idpConfig:y.idpConfig,showProvisioningTab:y.showProvisioningTab,styling:d,customMessages:c,backButton:n,schema:p,readOnly:m,providerId:t,domains:s,hideHeader:u},w={handleToggleProvider:y.handleToggleProvider,updateProvider:g.updateProvider,listScimTokens:g.listScimTokens,syncSsoAttributes:g.syncSsoAttributes,onDeleteConfirm:g.onDeleteConfirm,onRemoveConfirm:g.onRemoveConfirm,createScimTokenAction:g.createScimToken,deleteScimTokenAction:g.deleteScimToken,createProvisioningAction:g.createProvisioning,deleteProvisioningAction:g.deleteProvisioning,syncProvisioningAttributes:g.syncProvisioningAttributes},b=g.isLoading||y.isLoadingConfig||y.isLoadingIdpConfig;return f.jsx(ac,{isLoading:b,styling:d,children:f.jsx(VE,{logic:A,handlers:w})})}function VE({logic:e,handlers:t}){let{styling:n,schema:r,readOnly:o,providerId:s,domains:u,hideHeader:c,provider:d,organization:p,isLoading:m,isUpdating:g,isDeleting:y,isRemoving:A,idpConfig:w,customMessages:b,backButton:x,shouldAllowDeletion:E,showProvisioningTab:S,isProvisioningUpdating:F,isProvisioningDeleting:R,isScimTokensLoading:k,isScimTokenCreating:B,isScimTokenDeleting:N,isSsoAttributesSyncing:P,isProvisioningAttributesSyncing:U,hasSsoAttributeSyncWarning:Q,hasProvisioningAttributeSyncWarning:$}=e,{updateProvider:q,listScimTokens:V,syncSsoAttributes:W,onDeleteConfirm:ae,onRemoveConfirm:j,handleToggleProvider:G,createProvisioningAction:te,deleteProvisioningAction:ue,createScimTokenAction:ie,deleteScimTokenAction:z,syncProvisioningAttributes:O}=t,{isDarkMode:T}=en(),[J,le]=C.useState("sso"),{t:me}=Se("idp_management.edit_sso_provider",b),de=C.useMemo(()=>cn(n,T),[n,T]);return f.jsx(ja,{style:de.variables,children:f.jsxs("div",{className:"w-full",children:[!c&&f.jsx(es,{title:d?.display_name||d?.name||"",backButton:x&&{...x,text:me("header.back_button_text")},isLoading:g,actions:[{type:"switch",checked:d?.is_enabled??!1,onCheckedChange:G,disabled:g,tooltip:{content:d?.is_enabled?me("header.disable_provider_tooltip_text"):me("header.enable_provider_tooltip_text")}}],className:de?.classes?.["SsoProviderEdit-header"]}),f.jsxs(JI,{value:J,onValueChange:le,className:X("space-y-10",de?.classes?.["SsoProviderEdit-tabs"]),children:[f.jsxs(eU,{className:X("grid w-full",S?"grid-cols-3":"grid-cols-2"),children:[f.jsx(_g,{value:"sso",className:"text-sm",children:me("tabs.sso.name")}),S&&f.jsx(_g,{value:"provisioning",className:"text-sm",children:me("tabs.provisioning.name")}),f.jsx(_g,{value:"domain",className:"text-sm",children:me("tabs.domains.name")})]}),f.jsx(Cg,{value:"sso",children:f.jsx(VI,{provider:d,organization:p,onDelete:ae,onRemove:j,isDeleting:y,isRemoving:A,idpConfig:w,shouldAllowDeletion:E,hasSsoAttributeSyncWarning:Q,onAttributeSync:W,isSyncingAttributes:P,customMessages:b?.tabs?.sso?.content,styling:n,formActions:{isLoading:g,nextAction:{disabled:g||!d||m,onClick:q}},readOnly:o})}),S&&f.jsx(Cg,{value:"provisioning",children:f.jsx(XI,{provider:d,isProvisioningUpdating:F,isProvisioningDeleting:R,isScimTokensLoading:k,isScimTokenCreating:B,isScimTokenDeleting:N,hasProvisioningAttributeSyncWarning:$,onAttributeSync:O,isSyncingAttributes:U,onCreateProvisioning:te,onDeleteProvisioning:ue,onListScimTokens:V,onCreateScimToken:ie,onDeleteScimToken:z,customMessages:b?.tabs?.provisioning?.content,styling:n})}),f.jsx(Cg,{value:"domain",children:f.jsx(fI,{customMessages:b?.tabs?.domains?.content,styling:n,domains:u,schema:r?.domains,idpId:s,provider:d,readOnly:o})})]})]})})}var aU=C.forwardRef(function({strategy:e,initialData:t,readOnly:n=!1,customMessages:r={},className:o,idpConfig:s,isLoading:u},c){let{t:d}=Se("idp_management.create_sso_provider.provider_configure",r),p=C.useRef(null);return C.useImperativeHandle(c,()=>({validate:async()=>await p.current?.validate()??!1,getData:()=>p.current?.getData()})),u?f.jsx("div",{className:"flex justify-center items-center p-8",children:f.jsx(dn,{})}):f.jsx("div",{className:o,children:f.jsx(vu,{title:d("title"),description:d("description"),children:f.jsx(zE,{ref:p,strategy:e,initialData:t,readOnly:n,customMessages:r.fields,idpConfig:s})})})}),oU=aU,iU=({width:e=17,height:t=17,title:n="EntraID logo",className:r,...o})=>f.jsx("img",{src:j7,alt:n,width:e,height:t,className:r,...o}),sU=Y.memo(iU),uU=({width:e=17,height:t=17,title:n="Microsoft logo",className:r,...o})=>f.jsx("img",{src:B7,alt:n,width:e,height:t,className:r,...o}),lU=Y.memo(uU),cU=({width:e=17,height:t=17,title:n="Oidc logo",className:r,...o})=>f.jsx("img",{src:k7,alt:n,width:e,height:t,className:r,...o}),dU=Y.memo(cU),fU=({width:e=17,height:t=17,title:n="Okta logo",className:r,...o})=>f.jsx("img",{src:M7,alt:n,width:e,height:t,className:X("dark:invert",r),...o}),hU=Y.memo(fU),mU=({width:e=17,height:t=17,title:n="PingId logo",className:r,...o})=>f.jsx("img",{src:N7,alt:n,width:e,height:t,className:r,...o}),pU=Y.memo(mU),gU=({width:e=17,height:t=17,title:n="Samlp logo",className:r,...o})=>f.jsx("img",{src:T7,alt:n,width:e,height:t,className:r,...o}),vU=Y.memo(gU),AU={[St.OKTA]:hU,[St.GOOGLE_APPS]:lE,[St.WAAD]:sU,[St.ADFS]:lU,[St.PINGFEDERATE]:pU,[St.SAMLP]:vU,[St.OIDC]:dU};function yU({isLoading:e,strategyList:t,onClickStrategy:n,customMessages:r={},className:o}){let{t:s}=Se("idp_management.create_sso_provider.provider_select",r);return f.jsx(vu,{title:s("title"),description:s("description"),className:o,children:f.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:e?f.jsx("div",{className:"col-span-full flex items-center justify-center min-h-[100px]",children:f.jsx(dn,{})}):t.map(u=>{let c=AU[u],d=Jh[u];return f.jsx(Je,{variant:"outline",className:"justify-start h-10 py-2.5 px-3",onClick:()=>n(u),children:f.jsxs("div",{className:"flex items-center gap-3 w-full text-left",children:[f.jsx(c,{className:"w-4 h-4 flex-shrink-0 text-primary"}),f.jsx("div",{className:"flex flex-col gap-1",children:f.jsx("span",{className:"font-medium",children:d})})]})},u)})})})}var HE=C.createContext(null),bU=()=>{let e=C.useContext(HE);if(!e)throw new Error("Stepper components must be used within a Stepper");return e};function xU({currentStep:e=0,className:t,onStepClick:n,enableAllSteps:r=!1,children:o}){let s=C.useMemo(()=>({currentStep:e,isClickable:r&&!!n,onStepClick:n}),[e,r,n]),u=C.useMemo(()=>{let c=C.Children.toArray(o),d=[];return c.forEach((p,m)=>{d.push(p),m{g&&(s?.(),d?.(e,t))};return f.jsxs("div",{"data-slot":"stepper-step","data-state":p?"current":m?"completed":"pending","data-step":e,className:X("flex items-start",g&&"cursor-pointer hover:opacity-80 transition-opacity",r),onClick:y,role:g?"button":void 0,tabIndex:g?0:void 0,onKeyDown:g?A=>{(A.key==="Enter"||A.key===" ")&&(A.preventDefault(),y())}:void 0,children:[f.jsx("div",{className:X("flex items-center justify-center rounded-full transition-colors w-[21px] h-[21px] flex-shrink-0 mt-0.5",m?"bg-foreground text-background dark:bg-background dark:text-foreground border-0":p?"border-2 border-primary bg-background text-primary":"bg-muted-foreground/30 border-0 text-muted-foreground"),children:m?f.jsx(sm,{className:"w-3 h-3"}):n?null:f.jsx("span",{className:"text-xs font-medium",children:e+1})}),f.jsx("div",{className:"ml-2 flex-1",children:o})]})}function CU({className:e,children:t}){return f.jsx("p",{"data-slot":"stepper-title",className:X("text-sm font-medium transition-colors whitespace-nowrap text-foreground",e),children:t})}function wU({className:e}){return f.jsx(ou,{orientation:"horizontal",className:X("flex-1 mx-4",e),"data-slot":"stepper-separator"})}function EU({className:e,children:t}){return f.jsx("p",{"data-slot":"stepper-description",className:X("text-xs text-muted-foreground mt-1",e),children:t})}function SU({steps:e,currentStep:t=0,onStepClick:n,className:r,hideNumbers:o=!0}){return f.jsx(xU,{currentStep:t,enableAllSteps:!!n,onStepClick:n,className:r,children:e.map((s,u)=>f.jsxs(_U,{step:u,id:s.id,hideNumber:o,children:[f.jsx(CU,{className:"text-(length:--font-size-label)",children:s.title}),s.description&&f.jsx(EU,{children:s.description})]},s.id||u))})}function DU({steps:e,initialStep:t=0,onComplete:n,className:r,formActionLabels:o,hideStepperNumbers:s=!1,isLoading:u=!1,allowStepNavigation:c=!0}){let[d,p]=C.useState(t),m=e[d],g=d===0,y=d===e.length-1,A=C.useCallback(async()=>{if(u)return;let R=e[d];R?.actions?.onNextAction&&!await R.actions.onNextAction(R.id)||(y?await n?.():p(k=>k+1))},[d,y,e,n,u]),w=C.useCallback(async()=>{if(g)return;let R=e[d];R?.actions?.onPreviousAction&&!await R.actions.onPreviousAction(R.id)||p(k=>k-1)},[d,g,e]),b=C.useCallback(async R=>{u||!c||R>d||p(R)},[d,u,c]),x=m?.content,E=m?.actions?.showPrevious!==!1&&!g,S=m?.actions?.showNext??!0,F={nextButtonLabel:"Next",previousButtonLabel:"Previous",completeButtonLabel:"Submit",...o};return f.jsxs("div",{className:X("space-y-6",r),children:[f.jsx(SU,{steps:e,currentStep:d,hideNumbers:s,onStepClick:c?b:void 0}),f.jsx(Sr,{children:f.jsxs(Va,{className:"relative",children:[u&&f.jsx("div",{className:"absolute inset-0 bg-white/50 flex items-center justify-center z-10",children:f.jsx(dn,{})}),f.jsx("div",{className:X(u&&"opacity-50 pointer-events-none"),children:x?f.jsx(x,{onNext:A,onPrevious:w,isLoading:u}):null})]})}),f.jsx(Pf,{isLoading:u,showPrevious:E,showNext:S,showUnsavedChanges:!1,nextAction:{type:"button",label:y?F.completeButtonLabel:F.nextButtonLabel,variant:"primary",onClick:A},previousAction:{type:"button",label:F.previousButtonLabel,variant:"outline",onClick:w}})]})}function FU(e){return e?e.match(/discovery failure:\s*(.+)/i)?.[1]?.trim()??null:null}function QE({createAction:e,customMessages:t={}}={}){let{coreClient:n}=Un(),{t:r}=Se("idp_management.create_sso_provider",t),o=Ua(),s=ts(),u=Kt({mutationFn:async c=>{if(!n)throw new Error("Core client not available");let{strategy:d,name:p,display_name:m,...g}=c,y={strategy:d,name:p,display_name:m,options:g},A=em.createToAPI(y);return await n.getMyOrganizationApiClient().organization.identityProviders.create(A)},onSuccess:(c,d)=>{bt({type:"success",message:r("notifications.provider_create_success",{providerName:c.name})}),e?.onAfter?.(d,c),o.invalidateQueries({queryKey:wa.list()})},onError:(c,d)=>{if(zi(c)&&c.body?.status===409&&c.body?.type==="https://auth0.com/api-errors#A0E-409-0001"){bt({type:"error",message:r("notifications.provider_create_duplicated_provider_error",{providerName:d.name})});return}if(zi(c)){let p=FU(c.body?.detail);if(p){bt({type:"error",message:r("notifications.provider_create_discovery_failure",{domain:p})});return}}s(c,{fallbackMessage:r("notifications.general_error")})}});return{createProvider:C.useCallback(async c=>{if(!n){bt({type:"error",message:r("notifications.general_error")});return}e?.onBefore&&!e.onBefore(c)||await u.mutateAsync(c)},[n,e,u]),isCreating:u.isPending}}function RU({onNext:e,onPrevious:t,createProvider:n}){let[r,o]=C.useState({}),{strategy:s,details:u,configure:c}=r,d=C.useRef(null),p=C.useRef(null),{isLoadingConfig:m,filteredStrategies:g}=Of(),{isLoadingIdpConfig:y,idpConfig:A}=If(),w=C.useCallback((x,E)=>{let S=x==="provider_details"?"details":"configure",F=async(R,k=!1)=>{if(k&&!await E.current?.validate())return!1;let B=E.current?.getData()??null;if(o(P=>({...P,[S]:B})),!R)return!0;let N={...r,[S]:B};return R(x,N)};return{onNextAction:()=>F(e,!0),onPreviousAction:()=>F(t,!1)}},[r,e,t]),b=C.useCallback(async()=>{let x=p.current?.getData();await n({strategy:s,...u,...x})},[s,u,c,n]);return{formData:r,setFormData:o,createStepActions:w,handleCreate:b,detailsRef:d,configureRef:p,isLoadingConfig:m,filteredStrategies:g,isLoadingIdpConfig:y,idpConfig:A}}function BU(e){let{createAction:t,backButton:n,customMessages:r={},styling:o={variables:{common:{},light:{},dark:{}},classes:{}},onNext:s,onPrevious:u}=e,{createProvider:c,isCreating:d}=QE({createAction:t,customMessages:r}),{formData:p,detailsRef:m,configureRef:g,setFormData:y,handleCreate:A,createStepActions:w,isLoadingConfig:b,filteredStrategies:x,isLoadingIdpConfig:E,idpConfig:S}=RU({onNext:s,onPrevious:u,createProvider:c}),{strategy:F,details:R,configure:k}=p;return f.jsx(ac,{styling:o,children:f.jsx(GE,{logic:{formData:p,strategy:F,details:R,configure:k,isCreating:d,isLoadingConfig:b,filteredStrategies:x,isLoadingIdpConfig:E,idpConfig:S,styling:o,customMessages:r,backButton:n},handlers:{onNext:s,onPrevious:u,setFormData:y,detailsRef:m,configureRef:g,handleCreate:A,createStepActions:w}})})}function GE({logic:e,handlers:t}){let{styling:n,customMessages:r,backButton:o,isCreating:s,strategy:u,details:c,configure:d,isLoadingConfig:p,filteredStrategies:m,isLoadingIdpConfig:g,idpConfig:y}=e,{isDarkMode:A}=en(),{t:w}=Se("idp_management.create_sso_provider",r),{detailsRef:b,configureRef:x,onNext:E,onPrevious:S,setFormData:F,handleCreate:R,createStepActions:k}=t,B=C.useMemo(()=>cn(n,A),[n,A]),N=C.useMemo(()=>[{id:"provider_select",title:w("steps.one"),content:({onNext:P})=>f.jsx(yU,{isLoading:p,strategyList:m,onClickStrategy:U=>{F(Q=>({strategy:U,details:Q.strategy===U?Q.details:null,configure:Q.strategy===U?Q.configure:null})),E?.("provider_select",{strategy:U}),P?.()},selectedStrategy:u,customMessages:r?.provider_select,className:B?.classes?.["ProviderSelect-root"]}),actions:{showNext:!1}},{id:"provider_details",title:w("steps.two"),content:()=>f.jsx(LE,{mode:"create",ref:b,initialData:c??void 0,customMessages:r?.provider_details,styling:n,className:B?.classes?.["ProviderDetails-root"]}),actions:k("provider_details",b)},{id:"provider_configure",title:w("steps.three"),content:()=>u?f.jsx(oU,{ref:x,strategy:u,isLoading:g,initialData:d??void 0,customMessages:r?.provider_configure,idpConfig:y??null,className:B?.classes?.["ProviderConfigure-root"]}):null,actions:k("provider_configure",x)}],[w,u,c,d,E,S,r,B,n,k]);return f.jsx(ja,{style:B.variables,children:f.jsxs("div",{className:"w-full",children:[f.jsx(es,{title:w("header.title"),backButton:o&&{...o,text:w("header.back_button_text")},className:B?.classes?.["SsoProviderCreate-header"]}),f.jsx("div",{className:"sso-provider-create__content","data-testid":"sso-provider-create-content",children:f.jsx(DU,{isLoading:s,hideStepperNumbers:!0,steps:N,onComplete:R,formActionLabels:{nextButtonLabel:w("nextButtonLabel"),previousButtonLabel:w("previousButtonLabel"),completeButtonLabel:w("completeButtonLabel")},className:B?.classes?.["SsoProviderCreate-wizard"]})})]})})}function YE({...e}){return f.jsx(JL,{"data-slot":"dropdown-menu",...e})}function KE({...e}){let t=Os();return f.jsx(G1,{container:t,"data-slot":"dropdown-menu-portal",...e})}function qE({className:e,variant:t,size:n,...r}){return f.jsx(eO,{asChild:!0,...r,children:f.jsx(Je,{"data-slot":"dropdown-menu-trigger",className:X(nE({variant:t,size:n}),e),children:r.children})})}function ZE({className:e,sideOffset:t=4,...n}){let r=Os();return f.jsx(G1,{container:r,children:f.jsx(tO,{"data-slot":"dropdown-menu-content",sideOffset:t,className:X("bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 shadow-bevel-xl z-50 min-w-[8rem] overflow-x-hidden overflow-y-auto rounded-2xl p-1 outline-none",e),...n})})}function as({className:e,inset:t,variant:n="default",...r}){return f.jsx(nO,{"data-slot":"dropdown-menu-item","data-inset":t,"data-variant":n,className:X("focus:bg-muted hover:bg-muted/50 focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*='text-'])]:text-muted-foreground relative flex w-full cursor-default items-center gap-2 rounded-xl px-2 py-1.5 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",e),...r})}function kU({provider:e,shouldAllowDeletion:t,readOnly:n=!1,isUpdating:r=!1,isUpdatingId:o,customMessages:s={},edit:u,onToggleEnabled:c,onEdit:d,onDelete:p,onRemoveFromOrganization:m}){let{t:g}=Se("idp_management.sso_provider_table",s),y=C.useCallback(x=>{c(e,x)},[e,c]),A=C.useCallback(()=>{d(e)},[e,d]),w=C.useCallback(()=>{p(e)},[e,p]),b=C.useCallback(()=>{m(e)},[e,m]);return f.jsxs("div",{className:"flex items-center justify-end gap-4 min-w-0",children:[r&&o===e.id?f.jsx(dn,{size:"sm",className:"m-auto"}):f.jsxs(Ha,{children:[f.jsx(Qa,{asChild:!0,children:f.jsx("span",{className:"flex items-center",children:f.jsx(lu,{checked:e.is_enabled??!1,onCheckedChange:y,disabled:n||r})})}),f.jsx(Ca,{children:e.is_enabled?g("table.actions.enabled_tooltip"):g("table.actions.disabled_tooltip")})]}),f.jsxs(YE,{children:[f.jsx(qE,{className:"h-8 w-8 p-0 rounded-xl bg-primary border border-primary/20 shadow-sm transition-all duration-200 hover:bg-primary/90 hover:shadow-md focus:outline-none focus:ring-2 focus:ring-primary/50",children:f.jsx(Ab,{className:"h-4 w-4 text-primary-foreground"})}),f.jsx(KE,{children:f.jsxs(ZE,{align:"end",children:[f.jsxs(as,{onClick:A,disabled:n||!u||u.disabled,children:[f.jsx(VB,{className:"mr-2 h-4 w-4"}),g("table.actions.edit_button_text")]}),t&&f.jsxs(as,{onClick:w,className:"text-destructive-foreground focus:text-destructive-foreground",disabled:n,children:[f.jsx(wl,{className:"mr-2 h-4 w-4"}),g("table.actions.delete_button_text")]}),f.jsxs(as,{onClick:b,className:"text-destructive-foreground focus:text-destructive-foreground",disabled:n,children:[f.jsx(wl,{className:"mr-2 h-4 w-4"}),g("table.actions.remove_button_text")]})]})})]})]})}function MU({readOnly:e,isLoading:t,createAction:n,editAction:r,deleteAction:o,deleteFromOrganizationAction:s,onEnableProvider:u,onDeleteConfirm:c,onRemoveConfirm:d}){let[p,m]=C.useState(!1),[g,y]=C.useState(!1),[A,w]=C.useState(null),{isLoadingConfig:b,shouldAllowDeletion:x,isConfigValid:E}=Of(),{isLoadingIdpConfig:S,isIdpConfigValid:F}=If(),R=!E||!F,k=t||b||S,B=C.useCallback(()=>{n?.onAfter&&n.onAfter()},[n]),N=C.useCallback(V=>{r?.onAfter&&r.onAfter(V)},[r]),P=C.useCallback(V=>{w(V),!(o?.onBefore&&!o.onBefore(V))&&m(!0)},[o]),U=C.useCallback(V=>{w(V),!(s?.onBefore&&!s.onBefore(V))&&y(!0)},[s]),Q=C.useCallback(async(V,W)=>{e||!u||await u(V,W)},[e,u]),$=C.useCallback(async V=>{await c(V),m(!1),w(null)},[c]),q=C.useCallback(async V=>{await d(V),y(!1),w(null)},[d]);return{isViewLoading:k,shouldAllowDeletion:x,showDeleteModal:p,shouldHideCreate:R,showRemoveModal:g,selectedIdp:A,setShowDeleteModal:m,setShowRemoveModal:y,setSelectedIdp:w,handleCreate:B,handleEdit:N,handleDelete:P,handleDeleteFromOrganization:U,handleToggleEnabled:Q,handleDeleteConfirm:$,handleRemoveConfirm:q}}function NU(e){let{customMessages:t={},styling:n={variables:{common:{},light:{},dark:{}},classes:{}},readOnly:r=!1,createAction:o,editAction:s,deleteAction:u,deleteFromOrganizationAction:c,enableProviderAction:d}=e,p=BE(u,c,d,t),{providers:m,organization:g,isLoading:y,isDeleting:A,isRemoving:w,isUpdating:b,isUpdatingId:x,onDeleteConfirm:E,onRemoveConfirm:S,onEnableProvider:F}=p,R=MU({isLoading:y,readOnly:r,createAction:o,editAction:s,deleteAction:u,deleteFromOrganizationAction:c,onEnableProvider:F,onDeleteConfirm:E,onRemoveConfirm:S}),k={data:m,styling:n,customMessages:t,readOnly:r,createAction:o,editAction:s,organization:g,isUpdating:b,isUpdatingId:x,isDeleting:A,isRemoving:w,hideHeader:!1,isLoading:R.isViewLoading,shouldHideCreate:R.shouldHideCreate,isViewLoading:R.isViewLoading,selectedIdp:R.selectedIdp,showDeleteModal:R.showDeleteModal,showRemoveModal:R.showRemoveModal,shouldAllowDeletion:R.shouldAllowDeletion},B={handleCreate:R.handleCreate,handleEdit:R.handleEdit,handleDelete:R.handleDelete,handleDeleteFromOrganization:R.handleDeleteFromOrganization,handleToggleEnabled:R.handleToggleEnabled,handleDeleteConfirm:R.handleDeleteConfirm,handleRemoveConfirm:R.handleRemoveConfirm,setShowDeleteModal:R.setShowDeleteModal,setShowRemoveModal:R.setShowRemoveModal,setSelectedIdp:R.setSelectedIdp};return f.jsx(ac,{isLoading:y,styling:n,children:f.jsx(WE,{logic:k,handlers:B})})}function WE({logic:e,handlers:t}){let{styling:n,customMessages:r,readOnly:o,data:s,shouldHideCreate:u,isViewLoading:c,createAction:d,editAction:p,selectedIdp:m,showDeleteModal:g,showRemoveModal:y,shouldAllowDeletion:A,organization:w,isUpdating:b,isUpdatingId:x,isDeleting:E,isRemoving:S}=e,{handleCreate:F,handleEdit:R,handleDelete:k,handleDeleteFromOrganization:B,handleToggleEnabled:N,handleDeleteConfirm:P,handleRemoveConfirm:U,setShowDeleteModal:Q,setShowRemoveModal:$}=t,{isDarkMode:q}=en(),{t:V}=Se("idp_management.sso_provider_table",r),W=C.useMemo(()=>cn(n,q),[n,q]),ae=C.useMemo(()=>[{type:"text",accessorKey:"name",title:V("table.columns.name"),width:"25%",render:j=>f.jsx("div",{className:"font-medium text-muted-foreground",children:j.name})},{type:"text",accessorKey:"display_name",width:"30%",title:V("table.columns.display_name"),render:j=>f.jsx("div",{className:"text-muted-foreground",children:j.display_name})},{type:"text",accessorKey:"strategy",title:V("table.columns.identity_provider"),width:"25%",render:j=>f.jsx("div",{className:"text-muted-foreground",children:Jh[j.strategy]})},{type:"actions",title:"",width:"20%",render:j=>f.jsx(kU,{provider:j,shouldAllowDeletion:A,readOnly:o,isUpdating:b,isUpdatingId:x,customMessages:r,edit:p,onToggleEnabled:N,onEdit:R,onDelete:k,onRemoveFromOrganization:B})}],[V,o,p,b,R,k,B,N]);return f.jsxs(ja,{style:W.variables,children:[f.jsx("div",{className:W.classes?.["SsoProviderTable-header"],children:f.jsx(es,{title:V("header.title"),description:V("header.description"),actions:[{type:"button",label:V("header.create_button_text"),onClick:()=>F(),icon:Ad,hidden:u||c,disabled:d?.disabled||o}]})}),f.jsx(tc,{loading:c,columns:ae,data:s,emptyState:{title:V("table.empty_message")},className:W.classes?.["SsoProviderTable-table"]}),m&&f.jsx(TE,{className:W.classes?.["SsoProviderTable-deleteProviderModal"],isOpen:g,onClose:()=>Q(!1),provider:m,onDelete:P,isLoading:E,customMessages:r?.delete_modal}),m&&f.jsx(UE,{className:W.classes?.["SsoProviderTable-deleteProviderFromOrganizationModal"],isOpen:y,onClose:()=>$(!1),provider:m,organizationName:w?.name,onRemove:U,isLoading:S,customMessages:r?.remove_modal})]})}function TU({className:e,customMessages:t,domain:n,providers:r,isOpen:o,isLoading:s,isLoadingSwitch:u,onClose:c,onToggleSwitch:d,onOpenProvider:p,onCreateProvider:m}){let{t:g}=Se("domain_management.domain_configure_providers.modal",t),y=Y.useCallback((w,b)=>{d(n,w,b)},[n,d]),A=Y.useMemo(()=>[{type:"text",accessorKey:"display_name",title:g("table.columns.name"),width:"25%",render:w=>f.jsx("div",{className:"font-medium text-muted-foreground",children:w.display_name})},{type:"text",accessorKey:"strategy",title:g("table.columns.provider"),width:"40%",render:w=>f.jsx("div",{className:"text-muted-foreground",children:w.strategy})},{type:"actions",title:"",width:"30%",render:w=>f.jsxs("div",{className:"flex items-center justify-end gap-4 min-w-0",children:[p&&f.jsx(Je,{type:"button",variant:"outline",size:"sm",onClick:()=>p(w),children:g("table.actions.view_provider_button_text")}),f.jsxs(Ha,{children:[f.jsx(Qa,{asChild:!0,children:f.jsx("span",{children:f.jsx(lu,{checked:w.is_associated??!1,onCheckedChange:b=>y(w,b),disabled:u})})}),f.jsx(Ca,{className:"z-[1000]",children:w.is_associated?g("table.actions.disable_provider_tooltip"):g("table.actions.enable_provider_tooltip")})]})]})}],[g,p,u,y]);return f.jsx(Ga,{open:o,onOpenChange:w=>!w&&c(),className:"p-10",title:g("title",{domain:n?.domain??""}),content:n&&f.jsxs("div",{className:X("space-y-6",e),children:[f.jsx("p",{className:"text-sm text-muted-foreground text-(length:--font-size-paragraph)",children:g("description",{domain:n?.domain??""})}),f.jsx(tc,{columns:A,data:r,loading:s,emptyState:{title:g("table.empty_message"),action:m?{label:g("table.actions.add_provider_button_text"),variant:"outline",onClick:m}:void 0}})]}),modalActions:{showNext:!1,previousAction:{label:g("actions.close_button_text"),onClick:c}}})}function jU({customMessages:e={},readOnly:t=!1,domain:n,onView:r,onConfigure:o,onVerify:s,onDelete:u}){let{t:c}=Se("domain_management.domain_table",e),d=C.useCallback(()=>{o(n)},[n,r]),p=C.useCallback(()=>{o(n)},[n,o]),m=C.useCallback(()=>{s(n)},[n,s]),g=C.useCallback(()=>{u(n)},[n,u]);return f.jsx("div",{className:"flex items-center justify-end gap-4 min-w-0",children:f.jsxs(YE,{children:[f.jsx(qE,{className:"h-8 w-8 p-0 rounded-xl bg-primary border border-primary/20 shadow-sm transition-all duration-200 hover:bg-primary/90 hover:shadow-md focus:outline-none focus:ring-2 focus:ring-primary/50",children:f.jsx(Ab,{className:"h-4 w-4 text-primary-foreground"})}),f.jsx(KE,{children:f.jsxs(ZE,{align:"end",children:[n.status==="verified"&&f.jsxs(as,{onClick:p,disabled:t,children:[f.jsx(IB,{className:"mr-2 h-4 w-4"}),c("table.actions.configure_button_text")]}),n.status==="pending"&&f.jsxs(f.Fragment,{children:[f.jsxs(as,{onClick:d,disabled:t,children:[f.jsx(NB,{className:"mr-2 h-4 w-4"}),c("table.actions.view_button_text")]}),f.jsxs(as,{onClick:m,disabled:t,children:[f.jsx(bb,{className:"mr-2 h-4 w-4"}),c("table.actions.verify_button_text")]})]}),f.jsxs(as,{onClick:g,className:"text-destructive-foreground focus:text-destructive-foreground",disabled:t,children:[f.jsx(wl,{className:"mr-2 h-4 w-4 text-destructive-foreground focus:text-destructive-foreground"}),c("table.actions.delete_button_text")]})]})})]})})}var ta={all:["domains"],list:()=>[...ta.all,"list"],providers:e=>[...ta.all,"providers",e]};function XE({createAction:e,deleteAction:t,verifyAction:n,associateToProviderAction:r,deleteFromProviderAction:o,customMessages:s}){let{t:u}=Se("domain_management.domain_table.notifications",s),{coreClient:c}=Un(),d=Ua(),[p,m]=C.useState(null),[g,y]=C.useState(null),A=async k=>((await c.getMyOrganizationApiClient().organization.identityProviders.list())?.identity_providers??[]).map(B=>({...B,is_associated:B.domains?.includes(k)??!1})),w=ya({queryKey:ta.list(),queryFn:async()=>{let{response:k}=await c.getMyOrganizationApiClient().organization.domains.list();return k?.organization_domains??[]},enabled:!!c}),b=ya({queryKey:ta.providers(p??""),queryFn:()=>A(g),enabled:!!c&&!!p&&!!g}),x=Kt({mutationFn:async k=>{if(e?.onBefore&&!e.onBefore(k))throw new fa({message:u("domain_create.on_before")});return c.getMyOrganizationApiClient().organization.domains.create(k)},onSuccess:k=>{e?.onAfter?.(k),d.invalidateQueries({queryKey:ta.list()})}}),E=Kt({mutationFn:async k=>{if(n?.onBefore&&!n.onBefore(k))throw new fa({message:u("domain_verify.on_before")});return(await c.getMyOrganizationApiClient().organization.domains.verify.create(k.id)).status==="verified"},onSuccess:(k,B)=>{n?.onAfter?.(B),d.invalidateQueries({queryKey:ta.list()})}}),S=Kt({mutationFn:async k=>{if(t?.onBefore&&!t.onBefore(k))throw new fa({message:u("domain_delete.on_before")});await c.getMyOrganizationApiClient().organization.domains.delete(k.id)},onSuccess:(k,B)=>{t?.onAfter?.(B),d.invalidateQueries({queryKey:ta.list()}),d.removeQueries({queryKey:ta.providers(B.id)})}}),F=Kt({mutationFn:async({domain:k,provider:B})=>{if(r?.onBefore&&!r.onBefore(k,B))throw new fa({message:u("domain_associate_provider.on_before")});await c.getMyOrganizationApiClient().organization.identityProviders.domains.create(B.id,{domain:k.domain})},onSuccess:(k,{domain:B,provider:N})=>{r?.onAfter?.(B,N),d.invalidateQueries({queryKey:ta.providers(B.id)})}}),R=Kt({mutationFn:async({domain:k,provider:B})=>{if(o?.onBefore&&!o.onBefore(k,B))throw new fa({message:u("domain_delete_provider.on_before")});await c.getMyOrganizationApiClient().organization.identityProviders.domains.delete(B.id,k.domain)},onSuccess:(k,{domain:B,provider:N})=>{o?.onAfter?.(B,N),d.invalidateQueries({queryKey:ta.providers(B.id)})}});return{domains:w.data??[],providers:b.data??[],isFetching:w.isLoading,isCreating:x.isPending,isDeleting:S.isPending,isVerifying:E.isPending,isLoadingProviders:b.isLoading,fetchProviders:async k=>{m(k.id),y(k.domain),await d.ensureQueryData({queryKey:ta.providers(k.id),queryFn:()=>A(k.domain)})},fetchDomains:async()=>{await d.getQueryData(ta.list())},onCreateDomain:k=>x.mutateAsync(k),onVerifyDomain:k=>E.mutateAsync(k),onDeleteDomain:k=>S.mutateAsync(k),onAssociateToProvider:(k,B)=>F.mutateAsync({domain:k,provider:B}),onDeleteFromProvider:(k,B)=>R.mutateAsync({domain:k,provider:B})}}function $E({t:e,onCreateDomain:t,onVerifyDomain:n,onDeleteDomain:r,onAssociateToProvider:o,onDeleteFromProvider:s,fetchProviders:u,fetchDomains:c}){let d=ts(),[p,m]=C.useState(!1),[g,y]=C.useState(!1),[A,w]=C.useState(!1),[b,x]=C.useState(void 0),[E,S]=C.useState(!1),[F,R]=C.useState(null),k=C.useCallback(async W=>{try{let ae=await t({domain:W});bt({type:"success",message:e("domain_table.notifications.domain_create.success",{domainName:ae?.domain})}),R(ae),m(!1),w(!0)}catch(ae){d(ae,{fallbackMessage:e("domain_table.notifications.domain_create.error")})}},[t,e,d]),B=C.useCallback(async W=>{try{await n(W)?(w(!1),bt({type:"success",message:e("domain_table.notifications.domain_verify.success",{domainName:W.domain})})):x(e("domain_verify.modal.errors.verification_failed",{domainName:W.domain}))}catch(ae){d(ae,{fallbackMessage:e("domain_table.notifications.domain_verify.error")})}},[n,e,d]),N=C.useCallback(async W=>{try{await r(W),bt({type:"success",message:e("domain_table.notifications.domain_delete.success",{domainName:W.domain})}),S(!1),w(!1)}catch(ae){d(ae,{fallbackMessage:e("domain_table.notifications.domain_delete.error")})}},[r,e,d]),P=C.useCallback(async(W,ae,j)=>{if(j)try{await o(W,ae),bt({type:"success",message:e("domain_table.notifications.domain_associate_provider.success",{domain:W.domain,idp:ae.name})})}catch(G){d(G,{fallbackMessage:e("domain_table.notifications.domain_associate_provider.error")})}else try{await s(W,ae),bt({type:"success",message:e("domain_table.notifications.domain_delete_provider.success",{domain:W.domain,idp:ae.name})})}catch(G){d(G,{fallbackMessage:e("domain_table.notifications.domain_delete_provider.error")})}},[o,s,e,d]),U=C.useCallback(()=>{w(!1),x(void 0)},[]),Q=C.useCallback(()=>{m(!0)},[]),$=C.useCallback(async W=>{if(R(W),W.status!=="verified")w(!0);else try{await u(W),y(!0)}catch(ae){d(ae,{fallbackMessage:e("domain_table.notifications.fetch_providers_error")})}},[u,e,d]),q=C.useCallback(async W=>{R(W);try{await n(W)?(await u(W),y(!0),bt({type:"success",message:e("domain_table.notifications.domain_verify.success",{domainName:W.domain})})):bt({type:"error",message:e("domain_table.notifications.domain_verify.verification_failed",{domainName:W.domain})})}catch(ae){d(ae,{fallbackMessage:e("domain_table.notifications.domain_verify.error")})}},[n,u,e,d]),V=C.useCallback(W=>{R(W),w(!1),S(!0)},[]);return C.useEffect(()=>{try{c()}catch(W){d(W,{fallbackMessage:e("domain_table.notifications.fetch_domains_error")})}},[]),{showCreateModal:p,showConfigureModal:g,showVerifyModal:A,showDeleteModal:E,verifyError:b,selectedDomain:F,setShowCreateModal:m,setShowConfigureModal:y,setShowVerifyModal:w,setShowDeleteModal:S,handleCreate:k,handleVerify:B,handleDelete:N,handleToggleSwitch:P,handleCloseVerifyModal:U,handleCreateClick:Q,handleConfigureClick:$,handleVerifyClick:q,handleDeleteClick:V}}function PU(e){let{schema:t,hideHeader:n=!1,readOnly:r=!1,createAction:o,verifyAction:s,deleteAction:u,associateToProviderAction:c,deleteFromProviderAction:d,customMessages:p={},styling:m={variables:{common:{},light:{},dark:{}},classes:{}},onOpenProvider:g,onCreateProvider:y}=e,{t:A}=Se("domain_management",p),w=XE({createAction:o,verifyAction:s,deleteAction:u,associateToProviderAction:c,deleteFromProviderAction:d,customMessages:p}),b=$E({t:A,onCreateDomain:w.onCreateDomain,onVerifyDomain:w.onVerifyDomain,onDeleteDomain:w.onDeleteDomain,onAssociateToProvider:w.onAssociateToProvider,onDeleteFromProvider:w.onDeleteFromProvider,fetchProviders:w.fetchProviders,fetchDomains:w.fetchDomains}),x={...w,schema:t,styling:m,hideHeader:n,readOnly:r,onOpenProvider:g,onCreateProvider:y};return f.jsx(ac,{isLoading:w.isFetching,styling:m,children:f.jsx(JE,{logic:x,handlers:b})})}function JE({logic:e,handlers:t}){let{isDarkMode:n}=en(),{t:r}=Se("domain_management",e.customMessages),{domains:o,providers:s,isCreating:u,isVerifying:c,isFetching:d,isLoadingProviders:p,isDeleting:m,schema:g,styling:y,hideHeader:A,readOnly:w=!1,customMessages:b,createAction:x,onOpenProvider:E,onCreateProvider:S}=e,{showCreateModal:F,showConfigureModal:R,showVerifyModal:k,showDeleteModal:B,verifyError:N,selectedDomain:P,setShowCreateModal:U,setShowConfigureModal:Q,setShowDeleteModal:$,handleCreate:q,handleVerify:V,handleDelete:W,handleToggleSwitch:ae,handleCloseVerifyModal:j,handleCreateClick:G,handleConfigureClick:te,handleVerifyClick:ue,handleDeleteClick:ie}=t,z=C.useMemo(()=>cn(y,n),[y,n]),O=C.useMemo(()=>[{type:"text",accessorKey:"domain",title:r("domain_table.table.columns.domain"),width:"35%",render:T=>f.jsx("div",{className:"font-medium text-primary truncate",children:T.domain})},{type:"text",accessorKey:"status",title:r("domain_table.table.columns.status"),width:"25%",render:T=>f.jsx(Ji,{variant:ME(T.status),size:"sm",children:r(`shared.domain_statuses.${T.status}`)})},{type:"actions",title:"",width:"20%",render:T=>f.jsx(jU,{domain:T,readOnly:w,customMessages:e.customMessages,onView:te,onConfigure:te,onVerify:ue,onDelete:ie})}],[r,w,b,te,ue,ie]);return f.jsxs(ja,{style:z.variables,children:[!A&&f.jsx("div",{className:z.classes?.["DomainTable-header"],children:f.jsx(es,{title:r("domain_table.header.title"),description:r("domain_table.header.description"),actions:[{type:"button",label:r("domain_table.header.create_button_text"),onClick:()=>G(),icon:Ad,disabled:x?.disabled||w||d}]})}),f.jsx(tc,{columns:O,data:o,loading:d,emptyState:{title:r("domain_table.table.empty_message")},className:z.classes?.["DomainTable-table"]}),f.jsx(xE,{className:z.classes?.["DomainTable-createModal"],isOpen:F,isLoading:u,schema:g?.create,onClose:()=>U(!1),onCreate:q,customMessages:b?.create}),f.jsx(TU,{className:z.classes?.["DomainTable-configureModal"],domain:P,providers:s,isOpen:R,isLoading:p,isLoadingSwitch:!1,onClose:()=>Q(!1),onToggleSwitch:ae,onOpenProvider:E,onCreateProvider:S,customMessages:b?.configure}),f.jsx(EE,{className:z.classes?.["DomainTable-verifyModal"],isOpen:k,isLoading:c,domain:P,error:N,onClose:j,onVerify:V,onDelete:ie,customMessages:b?.verify}),f.jsx(_E,{className:z.classes?.["DomainTable-deleteModal"],domain:P,isOpen:B,isLoading:m,onClose:()=>$(!1),onDelete:W,customMessages:b?.delete})]})}var e5=C.createContext(void 0),yu=()=>{let e=C.useContext(e5);if(!e)throw new Error("useColorPicker must be used within a ColorPickerProvider");return e},t5=({value:e,defaultValue:t={h:0,s:0,v:0,a:1},onChange:n,onChangeHsva:r,className:o,...s})=>{let[u,c]=C.useState("hex"),[d,p]=C.useState(()=>{try{return e&&typeof e=="object"?e:t&&typeof t=="object"?t:{h:0,s:0,v:0,a:1}}catch{return{h:0,s:0,v:0,a:1}}});C.useEffect(()=>{if(e!==void 0)try{let y;if(e&&typeof e=="object")y=e;else return;JSON.stringify(y)!==JSON.stringify(d)&&p(y)}catch{}},[e,d]);let m=C.useCallback(y=>{p(y),r?.(y),n?.(_a(y))},[r,n]),g=C.useMemo(()=>({hsva:d,setHsva:m,onChange:n,onChangeHsva:r,mode:u,setMode:c}),[d,m,n,r,u,c]);return f.jsx(e5.Provider,{value:g,children:f.jsx("div",{className:X("flex size-full flex-col gap-4",o),...s})})},n5=C.memo(({className:e,...t})=>{let{hsva:n,setHsva:r}=yu(),o=C.useCallback(s=>{let u=s.s<1||s.v<1?n.h:s.h;r({...n,s:s.s,v:s.v,h:u})},[r,n]);return f.jsx("div",{className:X("relative size-full",e),...t,children:f.jsx($1,{hsva:n,pointer:({prefixCls:s,left:u,top:c,color:d})=>f.jsx("div",{className:X("absolute size-4 -translate-x-1/2 -translate-y-1/2 rounded-full border-2 border-white",s),style:{left:u,top:c,backgroundColor:d}}),onChange:s=>o(s),radius:6,style:{width:"100%",height:"100%"}})})});n5.displayName="ColorPickerSelection";var r5=({className:e,...t})=>{let{hsva:n,setHsva:r}=yu(),o=C.useCallback(s=>{r({...n,h:s.h})},[r,n]);return f.jsx("div",{className:X("relative flex h-4 w-full",e),...t,children:f.jsx(tE,{hue:n.h,pointer:({prefixCls:s,left:u,top:c,color:d})=>f.jsx("div",{className:X("bg-background shadow-bevel-xs border-border border-px absolute h-6 w-1.5 -translate-x-1/2 -translate-y-1 rounded-full",s),style:{left:u,top:c,backgroundColor:d}}),onChange:s=>o(s),radius:6,style:{width:"100%",height:"100%"}})})};r5.displayName="ColorPickerHue";var a5=({className:e,...t})=>{let{hsva:n,setHsva:r}=yu(),o=C.useCallback(s=>{r({...n,a:s.a})},[r,n]);return f.jsx("div",{className:X("relative flex h-4 w-full",e),...t,children:f.jsx(ig,{hsva:n,pointer:({prefixCls:s,left:u,top:c,color:d})=>f.jsx("div",{className:X("bg-background shadow-bevel-xs border-border border-px absolute h-6 w-1.5 -translate-x-1/2 -translate-y-1 rounded-full",s),style:{left:u,top:c,backgroundColor:d}}),radius:6,onChange:o,style:{width:"100%",height:"100%"}})})};a5.displayName="ColorPickerAlpha";var o5=({className:e,...t})=>{let{setHsva:n}=yu(),r=async()=>{try{let o=window.EyeDropper;if(!o){console.warn("EyeDropper API is not supported in this browser");return}let s=await new o().open();if(s&&typeof s.sRGBHex=="string"){let u=au(s.sRGBHex);n(u)}}catch(o){console.error("EyeDropper failed:",o)}};return f.jsx(Je,{className:X("text-muted-foreground shrink-0 rounded-lg shadow-none",e),onClick:r,type:"button",size:"icon",variant:"ghost",...t,children:f.jsx(UB,{size:20})})};o5.displayName="ColorPickerEyeDropper";var zU=["hex","rgb","hsl"],i5=({...e})=>{let{mode:t,setMode:n}=yu();return f.jsxs(fu,{onValueChange:n,value:t,children:[f.jsx(mu,{className:"h-8 w-20 shrink-0 rounded-lg text-xs",...e,children:f.jsx(hu,{placeholder:t.toUpperCase()})}),f.jsx(pu,{children:zU.map(r=>f.jsx(gu,{className:"text-xs",value:r,children:r.toUpperCase()},r))})]})};i5.displayName="ColorPickerOutput";var Sg=({className:e,...t})=>f.jsxs("div",{className:"relative",children:[f.jsx(Zt,{readOnly:!0,type:"text",...t,className:X("h-8 w-20 rounded-lg",e)}),f.jsx("span",{className:"text-muted-foreground absolute top-1/2 right-2 -translate-y-1/2 text-xs",children:"%"})]}),s5=({className:e,alpha:t,...n})=>{let{hsva:r,mode:o}=yu();if(o==="hex"){let s=_a(r),u=Math.round(r.a*100);return f.jsxs("div",{className:X("relative flex w-full shrink items-center gap-1",e),...n,children:[f.jsx(Zt,{readOnly:!0,type:"text",value:s,className:X("h-8 flex-1 rounded-lg",e)}),t&&f.jsx(Sg,{value:u})]})}if(o==="rgb"){let s=K1(r),u=Math.round(r.a*100);return f.jsxs("div",{className:X("flex shrink items-center gap-1",e),...n,children:[[s.r,s.g,s.b].map((c,d)=>f.jsx(Zt,{className:X("h-8 flex-1 rounded-lg",e),readOnly:!0,type:"text",value:Math.round(c)},d)),t&&f.jsx(Sg,{value:u})]})}if(o==="hsl"){let{h:s,s:u,v:c,a:d}=r,p=c*(100-u)/100,m=u,g=p,y=Math.round(d*100);return f.jsxs("div",{className:X("flex shrink items-center gap-1",e),...n,children:[[Math.round(s),Math.round(m),Math.round(g)].map((A,w)=>f.jsx(Zt,{className:X("h-8 flex-1 rounded-lg",e),readOnly:!0,type:"text",value:A},w)),t&&f.jsx(Sg,{value:y})]})}return null};s5.displayName="ColorPickerFormat";var u5=({name:e,value:t,defaultValue:n="#000000",onChange:r,onChangeHsva:o,placeholder:s="Enter color value",className:u,disabled:c,variant:d="input",children:p,showTextInput:m=!0,showColorPicker:g=!0,alpha:y=!1,...A})=>{let[w,b]=C.useState(!1),[x,E]=C.useState(()=>{try{return typeof t=="string"?au(t):t&&typeof t=="object"?t:typeof n=="string"?au(n):n&&typeof n=="object"?n:{h:0,s:0,v:0,a:1}}catch{return{h:0,s:0,v:0,a:1}}}),[S,F]=C.useState(()=>{try{return typeof t=="string"?t:t&&typeof t=="object"?_a(t):typeof n=="string"?n:n&&typeof n=="object"?_a(n):"#000000"}catch{return"#000000"}}),[R,k]=C.useState(!0),B=C.useRef(null),N=C.useRef(null);C.useEffect(()=>{if(t!==void 0)try{let ae;if(typeof t=="string")ae=au(t);else if(t&&typeof t=="object")ae=t;else return;E(ae),F(_a(ae))}catch{}},[t]);let P=_a(x),U=ae=>/^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$/.test(ae),Q=ae=>{let j=ae.replace(/^#+/,"").toLowerCase();return j=j.replace(/[^0-9a-f]/g,""),j.length===0?"":(j.length===1?j=j.repeat(6):j.length===2?j=j.repeat(3):j.length===3?j=j.split("").map(G=>G+G).join(""):j.length>6&&(j=j.substring(0,6)),`#${j}`)},$=ae=>{let j=ae.target.value;F(j),k(!0)},q=ae=>{if(ae.key==="Enter"){ae.preventDefault();let j=Q(S);F(j);let G=U(j);if(k(G),G)try{let te=au(j),ue={...te,h:te.s<1||te.v<1?x.h:te.h};E(ue),o?.(ue),r&&r(_a(ue))}catch{}}},V=()=>{let ae=Q(S);F(ae);let j=U(ae);if(k(j),j)try{let G=au(ae),te={...G,h:G.s<1||G.v<1?x.h:G.h};E(te),o?.(te),r&&r(_a(te))}catch{}else S&&(F(_a(x)),k(!0))},W=ae=>{b(ae),ae||F(_a(x))};return d==="default"?f.jsx(t5,{value:x,onChangeHsva:ae=>{E(ae),o?.(ae),r?.(_a(ae))},className:u,...A,children:p}):f.jsxs("div",{className:X(u),...A,children:[m&&f.jsx("div",{className:X("relative",u),children:f.jsx(Zt,{ref:B,name:e,value:S,onChange:$,onKeyDown:q,onBlur:V,placeholder:s,disabled:c,error:!R&&S!=="",startAdornment:g?f.jsx("div",{className:"mx-1 flex h-6 w-6 items-center justify-center",children:f.jsx("button",{ref:N,type:"button",className:"hover:ring-primary/20 border-primary/10 h-5 w-5 cursor-pointer items-center justify-center rounded-md border transition-all hover:ring-2",style:{backgroundColor:R?P:"#ccc"},onClick:()=>b(!w),disabled:c})}):f.jsx("div",{className:"h-6 w-6 rounded border",style:{backgroundColor:R?P:"#ccc"}})})}),g&&f.jsxs(iE,{open:w,onOpenChange:W,children:[f.jsx(sE,{ref:N,children:f.jsx("div",{className:"sr-only"})}),f.jsx(uE,{className:"w-full max-w-72 p-0",align:"start",side:"bottom",sideOffset:0,children:f.jsx("div",{className:"p-4",children:f.jsx(t5,{value:x,onChangeHsva:ae=>{E(ae),o?.(ae)},onChange:ae=>{r?.(ae)},children:p||f.jsxs("div",{className:"space-y-2",children:[f.jsx(n5,{className:"h-64 w-full"}),f.jsxs("div",{className:"flex items-center justify-center gap-4",children:[f.jsxs("div",{className:"flex flex-1 flex-col gap-2",children:[f.jsx(r5,{}),y&&f.jsx(a5,{})]}),f.jsx(o5,{})]}),f.jsxs("div",{className:"flex items-center gap-2",children:[f.jsx(i5,{}),f.jsx(s5,{alpha:y})]})]})})})})]})]})};function LU({placeholder:e="Enter image URL",previewPlaceholder:t="Paste an image URL to see a preview",previewIcon:n=f.jsx(jB,{size:24}),previewClassName:r,imgSizes:o,imgWidth:s,imgHeight:u,onImageLoad:c,onImageError:d,onChange:p,value:m,error:g,...y}){let[A,w]=C.useState(m?.toString()||""),[b,x]=C.useState(!1),[E,S]=C.useState(!0),F=U=>{if(!U.trim())return!0;try{let Q=new URL(U);return Q.protocol==="http:"||Q.protocol==="https:"}catch{return!1}},R=U=>{let Q=U.target.value,$=F(Q);S($),w(Q),x(!1),p?.(U)},k=()=>{x(!1),c?.(A)},B=()=>{x(!0),d?.(new Error("Failed to load image"))},N=g||!E&&A.trim()!==""||b,P=A.trim()!==""&&E&&!b;return f.jsxs("div",{className:"space-y-2",children:[f.jsx("div",{className:X("border-border/50 bg-muted/50 flex h-24 w-full items-center justify-center overflow-hidden rounded-lg border",P&&"bg-background p-0",r),children:P?f.jsx("img",{loading:"lazy",srcSet:A,src:A,sizes:o,decoding:"async",alt:"Preview",className:"animate-in fade-in-0 max-h-24 max-w-24 object-contain blur-none transition-all duration-200 ease-in-out",height:u,width:s,onLoad:k,onError:B}):f.jsxs("div",{className:"text-muted-foreground flex h-full w-full flex-col items-center justify-center gap-2 text-sm",children:[n,A.trim()!==""&&!E?"Invalid URL":t]})}),f.jsx(Zt,{...y,value:m,onChange:R,error:N,placeholder:e})]})}function OU({form:e,customMessages:t={},className:n,readOnly:r=!1}){let{t:o}=Se("organization_management.organization_details",t);return f.jsx("div",{className:n,children:f.jsxs(vu,{title:o("sections.branding.title"),children:[f.jsx(Ue,{control:e.control,name:"branding.logo_url",render:({field:s})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm text-(length:--font-size-label) font-medium",children:o("sections.branding.fields.logo.label")}),f.jsx(Qe,{children:f.jsx(LU,{...s,readOnly:r,onChange:u=>{s.onChange(u),u.target.value.trim()||e.clearErrors("branding.logo_url")},onImageError:()=>{e.setError("branding.logo_url",{type:"manual",message:o("sections.branding.fields.logo.error")})},onImageLoad:()=>{e.clearErrors("branding.logo_url")},startAdornment:f.jsx("div",{className:"p-1.5",children:f.jsx(zB,{})})})}),f.jsx(We,{className:"text-left text-sm text-(length:--font-size-paragraph)",role:"alert"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:o("sections.branding.fields.logo.helper_text")})]})}),f.jsx(Ue,{control:e.control,name:"branding.colors.primary",render:({field:s})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm text-(length:--font-size-label) font-medium",htmlFor:"primary-color",children:o("sections.branding.fields.primary_color.label")}),f.jsx(Qe,{children:f.jsx(u5,{...s,disabled:r})}),f.jsx(We,{className:"text-left text-sm text-(length:--font-size-paragraph)",role:"alert"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:o("sections.branding.fields.primary_color.helper_text")})]})}),f.jsx(Ue,{control:e.control,name:"branding.colors.page_background",render:({field:s})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm text-(length:--font-size-label) font-medium",htmlFor:"page-background-color",children:o("sections.branding.fields.page_background_color.label")}),f.jsx(Qe,{children:f.jsx(u5,{...s,disabled:r})}),f.jsx(We,{className:"text-left text-sm text-(length:--font-size-paragraph)",role:"alert"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:o("sections.branding.fields.page_background_color.helper_text")})]})})]})})}function IU({form:e,readOnly:t=!1,customMessages:n={},className:r}){let{t:o}=Se("organization_management.organization_details",n);return f.jsx("div",{className:r,children:f.jsxs(vu,{title:o("sections.settings.title"),children:[f.jsx(Ue,{control:e.control,name:"name",render:({field:s})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm text-(length:--font-size-label) font-medium",htmlFor:"organization-name",children:o("sections.settings.fields.name.label")}),f.jsx(Qe,{children:f.jsx(Zt,{id:"organization-name",placeholder:o("sections.settings.fields.name.placeholder"),error:!!e.formState.errors.name,"aria-invalid":!!e.formState.errors.name,readOnly:t,...s})}),f.jsx(We,{className:"text-left text-sm text-(length:--font-size-paragraph)",role:"alert"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:o("sections.settings.fields.name.helper_text")})]})}),f.jsx(Ue,{control:e.control,name:"display_name",render:({field:s})=>f.jsxs(Ve,{children:[f.jsx(He,{className:"text-sm text-(length:--font-size-label) font-medium",htmlFor:"organization-display-name",children:o("sections.settings.fields.display_name.label")}),f.jsx(Qe,{children:f.jsx(Zt,{id:"organization-display-name",placeholder:o("sections.settings.fields.display_name.placeholder"),error:!!e.formState.errors.display_name,"aria-invalid":!!e.formState.errors.display_name,readOnly:t,...s})}),f.jsx(We,{className:"text-left text-sm text-(length:--font-size-paragraph)",role:"alert"}),f.jsx(vt,{className:"text-sm text-(length:--font-size-paragraph) font-normal text-left",children:o("sections.settings.fields.display_name.helper_text")})]})})]})})}function UU({organization:e,isLoading:t=!1,schema:n,customMessages:r={},styling:o={variables:{common:{},light:{},dark:{}},classes:{}},readOnly:s=!1,formActions:u}){let{t:c}=Se("organization_management.organization_details",r),{isDarkMode:d}=en(),p=C.useMemo(()=>cn(o,d),[o,d]),m=C.useMemo(()=>{let E=(S,F)=>{let R=n?.[S];return R?{...R,errorMessage:R.errorMessage||F}:{errorMessage:F}};return Iy({name:E("name",c("sections.settings.fields.name.error")),displayName:E("displayName",c("sections.settings.fields.display_name.error")),primaryColor:E("primaryColor",c("sections.branding.fields.primary_color.error")),logoURL:E("logoURL",c("sections.branding.fields.logo.error")),backgroundColor:E("backgroundColor",c("sections.branding.fields.page_background_color.error"))})},[c,n]),g=C.useMemo(()=>({name:e.name,display_name:e.display_name,branding:{logo_url:e.branding.logo_url,colors:{primary:e.branding.colors.primary,page_background:e.branding.colors.page_background}}}),[e]),y=Cr({resolver:$r(m),mode:Fr,defaultValues:g,values:g}),A=y.formState.isDirty,w=Object.keys(y.formState.errors).length>0,b=C.useCallback(async E=>{if(u?.nextAction?.onClick){let S={...E,id:e.id};await u.nextAction.onClick(S)&&y.reset(E,{keepValues:!0,keepDirty:!1,keepTouched:!1})}},[u?.nextAction,e.id,y]),x=C.useCallback(E=>{y.reset(),u?.previousAction?.onClick?.(E)},[y,u?.previousAction?.onClick]);return t?f.jsx(dn,{}):f.jsx("div",{style:p.variables,className:"w-full space-y-6",children:f.jsx(Dr,{...y,children:f.jsx("form",{onSubmit:y.handleSubmit(b),className:"space-y-6",children:f.jsx(Sr,{"data-testid":"organization-details-card",className:X("p-6",p.classes?.OrganizationDetails_Card),children:f.jsxs("div",{className:"space-y-6",children:[f.jsx(IU,{form:y,readOnly:s,customMessages:r,className:p.classes?.OrganizationDetails_SettingsDetails}),f.jsx(ou,{}),f.jsx(OU,{form:y,readOnly:s,customMessages:r,className:p.classes?.OrganizationDetails_BrandingDetails}),f.jsx(Pf,{hasUnsavedChanges:A,isLoading:u.isLoading,nextAction:{label:c("submit_button_label"),disabled:u?.nextAction?.disabled||!A||u.isLoading||s||w,type:"submit"},previousAction:{label:c("cancel_button_label"),disabled:u?.previousAction?.disabled||u.isLoading||s,onClick:x},showPrevious:u?.showPrevious,unsavedChangesText:c("unsaved_changes_text"),showUnsavedChanges:u?.showUnsavedChanges,align:u?.align,className:p.classes?.OrganizationDetails_FormActions})]})})})})})}var Uf={all:["organization-details"],details:()=>[...Uf.all,"details"]},VU=Xh.create();function l5({saveAction:e,cancelAction:t,readOnly:n=!1,customMessages:r={}}){let{t:o}=Se("organization_management.organization_details_edit",r),{coreClient:s}=Un(),u=Ua(),c=!s,d=ts(),p=ya({queryKey:Uf.details(),queryFn:async()=>{let E=await s.getMyOrganizationApiClient().organizationDetails.get();return Ls.fromAPI(E)},enabled:!!s});C.useEffect(()=>{p.error&&d(p.error,{fallbackMessage:o("organization_changes_error_message_generic")})},[p.error,o,d]);let m=p.data??VU,g=Kt({mutationFn:async E=>{let S=Ls.toAPI(E),F=await s.getMyOrganizationApiClient().organizationDetails.update(S);return Ls.fromAPI(F)},onSuccess:(E,S)=>{u.setQueryData(Uf.details(),E),bt({type:"success",message:o("save_organization_changes_message",{organizationName:S.display_name||S.name})}),e?.onAfter?.(S)},onError:E=>{d(E,{fallbackMessage:o("organization_changes_error_message_generic")})}}),y=!!p.data,A=g.isPending||c,w=C.useCallback(async()=>{await u.getQueryData(Uf.details())},[u]),b=C.useCallback(async E=>{if(e?.onBefore&&!e.onBefore(E))return!1;try{return await g.mutateAsync(E),!0}catch{return!1}},[g,e]),x=C.useMemo(()=>({isLoading:g.isPending,previousAction:{disabled:t?.disabled||n||!y||A,onClick:()=>t?.onAfter?.(m)},nextAction:{disabled:e?.disabled||n||!y||A,onClick:b}}),[b,n,t,e?.disabled,y,A,m]);return{organization:m,isFetchLoading:p.isFetching,isSaveLoading:g.isPending,isInitializing:c,formActions:x,fetchOrgDetails:w,updateOrgDetails:b}}function HU(e){let{schema:t,customMessages:n={},styling:r={variables:{common:{},light:{},dark:{}},classes:{}},readOnly:o=!1,saveAction:s,cancelAction:u,hideHeader:c=!1,backButton:d}=e,{organization:p,isFetchLoading:m,formActions:g}=l5({saveAction:s,cancelAction:u,readOnly:o,customMessages:n});return f.jsx(ac,{isLoading:m,styling:r,children:f.jsx(c5,{organization:p,schema:t,styling:r,customMessages:n,readOnly:o,hideHeader:c,backButton:d,formActions:g})})}function c5({organization:e,schema:t,styling:n,customMessages:r,readOnly:o,hideHeader:s,backButton:u,formActions:c}){let{isDarkMode:d}=en(),{t:p}=Se("organization_management.organization_details_edit",r),m=C.useMemo(()=>cn(n,d),[n,d]);return f.jsx(ja,{style:m.variables,children:f.jsxs("div",{className:"w-full",children:[!s&&f.jsx("div",{className:"mb-8",children:f.jsx(es,{title:p("header.title",{organizationName:e.display_name||e.name||""}),backButton:u&&{...u,text:p("header.back_button_text")}})}),f.jsx("div",{className:"mb-8",children:f.jsx(UU,{organization:e,schema:t?.details,customMessages:r?.details,styling:n,readOnly:o,formActions:c})})]})})}const QU=Object.freeze(Object.defineProperty({__proto__:null,CoreClientContext:dm,DomainTable:PU,DomainTableView:JE,OrganizationDetailsEdit:HU,OrganizationDetailsEditView:c5,SsoProviderCreate:BU,SsoProviderCreateView:GE,SsoProviderEdit:rU,SsoProviderEditView:VE,SsoProviderTable:NU,SsoProviderTableView:WE,UserMFAMgmt:UO,UserMFAMgmtView:bE,useConfig:Of,useContactEnrollment:mE,useCoreClient:Un,useCoreClientInitialization:Fb,useDomainTable:XE,useDomainTableLogic:$E,useErrorHandler:ts,useIdpConfig:If,useMFA:yE,useOrganizationDetailsEdit:l5,useOtpConfirmation:dg,useOtpEnrollment:pE,useProviderFormMode:nc,useRecoveryCodeGeneration:gE,useSsoDomainTab:kE,useSsoProviderCreate:QE,useSsoProviderEdit:hg,useSsoProviderTable:BE,useTheme:en,useTranslator:Se},Symbol.toStringTag,{value:"Module"}));var GU=({...e})=>{let{isDarkMode:t}=en();return f.jsx(v2,{theme:t?"dark":"light",className:"toaster group",toastOptions:{style:{width:"fit-content",maxWidth:"22.25rem"}},...e})},YU=e=>{let t=C.useMemo(()=>e?e.provider==="custom"?e:{provider:"sonner",settings:{...Sl.provider==="sonner"?Sl.settings||{}:{},...e.provider==="sonner"?e.settings:{}}}:Sl,[e]);return C.useEffect(()=>{w2(t)},[t]),t},KU={enabled:!0,staleTime:120*1e3,gcTime:300*1e3,refetchOnWindowFocus:!1},Dg={maxRetries:3,maxRetryDelay:3e4,backoffMultiplier:2},qU={maxRetries:1},ZU=5*1e3;function WU(e){let t={...KU,...e};return t.enabled?t:{...t,staleTime:0,gcTime:ZU}}function d5(e){return!!e.state.error&&!Gh(e.state.error)}function XU(e,t){let n=new qj({queryCache:new OC({onError:r=>{Gh(r)||t({error:r,onRetry:async()=>{await n.refetchQueries({predicate:d5});let o=n.getQueryCache().getAll().some(d5);return o||t(null),!o}})}}),mutationCache:new LC({onError:(r,o,s,u)=>{bl(r)&&t({error:r,onRetry:async()=>{try{return await u.execute(o),t(null),!0}catch{return!1}}})}}),defaultOptions:{queries:{staleTime:e.staleTime,gcTime:e.gcTime,refetchOnWindowFocus:e.refetchOnWindowFocus,retry:(r,o)=>!bl(o)&&rMath.min(1e3*Dg.backoffMultiplier**r,Dg.maxRetryDelay),refetchOnReconnect:!0},mutations:{retry:(r,o)=>!bl(o)&&rXU(WU(t),r)),s=C.useMemo(()=>n??{error:null},[n]);return f.jsx(kb.Provider,{value:s,children:f.jsx(Zj,{client:o,children:e})})}var Fg=function(e,t){return Fg=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(n,r){n.__proto__=r}||function(n,r){for(var o in r)Object.prototype.hasOwnProperty.call(r,o)&&(n[o]=r[o])},Fg(e,t)};function JU(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");Fg(e,t);function n(){this.constructor=e}e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}var Vf=function(){return Vf=Object.assign||function(t){for(var n,r=1,o=arguments.length;r0&&o[o.length-1])||m[0]!==6&&m[0]!==2)){u=0;continue}if(m[0]===3&&(!o||m[1]>o[0]&&m[1]0?setTimeout(r,p):r(null)}}window.addEventListener("storage",c),e.addToWaiting(c);var d=setTimeout(c,Math.max(0,t-Date.now()))})];case 1:return n.sent(),[2]}})})},e.addToWaiting=function(t){this.removeFromWaiting(t),e.waiters!==void 0&&e.waiters.push(t)},e.removeFromWaiting=function(t){e.waiters!==void 0&&(e.waiters=e.waiters.filter(function(n){return n!==t}))},e.notifyWaiters=function(){e.waiters!==void 0&&e.waiters.slice().forEach(function(t){return t()})},e.prototype.releaseLock=function(t){return Ea(this,void 0,void 0,function(){return Sa(this,function(n){switch(n.label){case 0:return[4,this.releaseLock__private__(t)];case 1:return[2,n.sent()]}})})},e.prototype.releaseLock__private__=function(t){return Ea(this,void 0,void 0,function(){var n,r,o,s;return Sa(this,function(u){switch(u.label){case 0:return n=this.storageHandler===void 0?Hf:this.storageHandler,r=Bg+"-"+t,(o=n.getItemSync(r))===null?[2]:(s=JSON.parse(o)).id!==this.id?[3,2]:[4,bu.default().lock(s.iat)];case 1:u.sent(),this.acquiredIatSet.delete(s.iat),n.removeItemSync(r),bu.default().unlock(s.iat),e.notifyWaiters(),u.label=2;case 2:return[2]}})})},e.lockCorrector=function(t){for(var n=Date.now()-5e3,r=t,o=[],s=0;;){var u=r.keySync(s);if(u===null)break;o.push(u),s++}for(var c=!1,d=0;d"u"||(Qf=navigator.userAgent)===null||Qf===void 0||(Ng=Qf.startsWith)===null||Ng===void 0||Ng.call(Qf,"Mozilla/5.0 "),new TextEncoder,new TextDecoder,new TextEncoder,new TextDecoder;class Jn extends Error{constructor(t,n){var r;super(t,n),lt(this,"code","ERR_JOSE_GENERIC"),this.name=this.constructor.name,(r=Error.captureStackTrace)===null||r===void 0||r.call(Error,this,this.constructor)}}lt(Jn,"code","ERR_JOSE_GENERIC");class nV extends Jn{constructor(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"unspecified",o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"unspecified";super(t,{cause:{claim:r,reason:o,payload:n}}),lt(this,"code","ERR_JWT_CLAIM_VALIDATION_FAILED"),lt(this,"claim",void 0),lt(this,"reason",void 0),lt(this,"payload",void 0),this.claim=r,this.reason=o,this.payload=n}}lt(nV,"code","ERR_JWT_CLAIM_VALIDATION_FAILED");class rV extends Jn{constructor(t,n){let r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:"unspecified",o=arguments.length>3&&arguments[3]!==void 0?arguments[3]:"unspecified";super(t,{cause:{claim:r,reason:o,payload:n}}),lt(this,"code","ERR_JWT_EXPIRED"),lt(this,"claim",void 0),lt(this,"reason",void 0),lt(this,"payload",void 0),this.claim=r,this.reason=o,this.payload=n}}lt(rV,"code","ERR_JWT_EXPIRED");class aV extends Jn{constructor(){super(...arguments),lt(this,"code","ERR_JOSE_ALG_NOT_ALLOWED")}}lt(aV,"code","ERR_JOSE_ALG_NOT_ALLOWED");class oV extends Jn{constructor(){super(...arguments),lt(this,"code","ERR_JOSE_NOT_SUPPORTED")}}lt(oV,"code","ERR_JOSE_NOT_SUPPORTED"),lt(class extends Jn{constructor(){super(arguments.length>0&&arguments[0]!==void 0?arguments[0]:"decryption operation failed",arguments.length>1?arguments[1]:void 0),lt(this,"code","ERR_JWE_DECRYPTION_FAILED")}},"code","ERR_JWE_DECRYPTION_FAILED"),lt(class extends Jn{constructor(){super(...arguments),lt(this,"code","ERR_JWE_INVALID")}},"code","ERR_JWE_INVALID");class iV extends Jn{constructor(){super(...arguments),lt(this,"code","ERR_JWS_INVALID")}}lt(iV,"code","ERR_JWS_INVALID");class sV extends Jn{constructor(){super(...arguments),lt(this,"code","ERR_JWT_INVALID")}}lt(sV,"code","ERR_JWT_INVALID"),lt(class extends Jn{constructor(){super(...arguments),lt(this,"code","ERR_JWK_INVALID")}},"code","ERR_JWK_INVALID");class uV extends Jn{constructor(){super(...arguments),lt(this,"code","ERR_JWKS_INVALID")}}lt(uV,"code","ERR_JWKS_INVALID");class lV extends Jn{constructor(){super(arguments.length>0&&arguments[0]!==void 0?arguments[0]:"no applicable key found in the JSON Web Key Set",arguments.length>1?arguments[1]:void 0),lt(this,"code","ERR_JWKS_NO_MATCHING_KEY")}}lt(lV,"code","ERR_JWKS_NO_MATCHING_KEY");class cV extends Jn{constructor(){super(arguments.length>0&&arguments[0]!==void 0?arguments[0]:"multiple matching keys found in the JSON Web Key Set",arguments.length>1?arguments[1]:void 0),lt(this,Symbol.asyncIterator,void 0),lt(this,"code","ERR_JWKS_MULTIPLE_MATCHING_KEYS")}}lt(cV,"code","ERR_JWKS_MULTIPLE_MATCHING_KEYS");class dV extends Jn{constructor(){super(arguments.length>0&&arguments[0]!==void 0?arguments[0]:"request timed out",arguments.length>1?arguments[1]:void 0),lt(this,"code","ERR_JWKS_TIMEOUT")}}lt(dV,"code","ERR_JWKS_TIMEOUT");class fV extends Jn{constructor(){super(arguments.length>0&&arguments[0]!==void 0?arguments[0]:"signature verification failed",arguments.length>1?arguments[1]:void 0),lt(this,"code","ERR_JWS_SIGNATURE_VERIFICATION_FAILED")}}lt(fV,"code","ERR_JWS_SIGNATURE_VERIFICATION_FAILED");var Gf,Tg;typeof navigator>"u"||(Gf=navigator.userAgent)===null||Gf===void 0||(Tg=Gf.startsWith)===null||Tg===void 0||Tg.call(Gf,"Mozilla/5.0 "),new TextDecoder;var Yf,jg;typeof navigator>"u"||(Yf=navigator.userAgent)===null||Yf===void 0||(jg=Yf.startsWith)===null||jg===void 0||jg.call(Yf,"Mozilla/5.0 "),Object.freeze(new Set(["grant_type","client_id","client_secret","client_assertion","client_assertion_type","subject_token","subject_token_type","requested_token_type","actor_token","actor_token_type","audience","aud","resource","resources","resource_indicator","scope","connection","login_hint","organization","assertion"]));var hV={isAuthenticated:!1,isLoading:!0,error:void 0,user:void 0},rn=function(){throw new Error("You forgot to wrap your component in .")},mV=Vf(Vf({},hV),{buildAuthorizeUrl:rn,buildLogoutUrl:rn,getAccessTokenSilently:rn,getAccessTokenWithPopup:rn,getIdTokenClaims:rn,loginWithCustomTokenExchange:rn,customTokenExchange:rn,exchangeToken:rn,loginWithRedirect:rn,loginWithPopup:rn,connectAccountWithRedirect:rn,logout:rn,handleRedirectCallback:rn,getDpopNonce:rn,setDpopNonce:rn,generateDpopProof:rn,createFetcher:rn,getConfiguration:rn,mfa:{getAuthenticators:rn,enroll:rn,challenge:rn,verify:rn,getEnrollmentFactors:rn}}),pV=C.createContext(mV);(function(e){JU(t,e);function t(n,r){var o=e.call(this,r??n)||this;return o.error=n,o.error_description=r,Object.setPrototypeOf(o,t.prototype),o}return t})(Error);var gV=function(e){return e===void 0&&(e=pV),C.useContext(e)},vV=e=>{let{i18n:t,previewMode:n,themeSettings:r={theme:"default",mode:"light",variables:{common:{},light:{},dark:{}}},toastSettings:o,cacheConfig:s,loader:u,children:c,authContext:d}=e,p=YU(o),m=gV(),g=C.useMemo(()=>{if(d)return d;if(m&&"isAuthenticated"in m)return m;throw new Error("Auth0ContextInterface is not available. Make sure you wrap your app with Auth0Provider from @auth0/auth0-react, or pass authContext.")},[m,d]),y=C.useMemo(()=>({contextInterface:g,previewMode:n}),[g,n]),A=Fb({authDetails:y,i18nOptions:t}),w=C.useMemo(()=>({coreClient:A}),[A]),b=u||f.jsx(ja,{children:f.jsx("div",{className:"flex items-center justify-center min-h-[200px]",children:f.jsx(dn,{})})});return f.jsxs(A2,{themeSettings:{mode:r.mode,variables:r.variables,loader:u,theme:r.theme},children:[p.provider==="sonner"&&f.jsx(GU,{position:p.settings?.position||"top-right",closeButton:p.settings?.closeButton??!0,className:"auth0-universal"}),A?f.jsx(dm.Provider,{value:w,children:f.jsx($U,{cacheConfig:s,children:c})}):b]})};const AV=Object.freeze(Object.defineProperty({__proto__:null,Auth0ComponentProvider:vV},Symbol.toStringTag,{value:"Module"}));var g5={copy:"Copy",copied:"Copied!",error:{generic:"There was an issue processing your request. Please try again or contact support if the issue persists.",bad_request:"The request is invalid. Please check your input and try again.",missing_token:"Your session has expired. Please log in again.",insufficient_scope:"You do not have the required scope permissions to perform this action.",forbidden:"You do not have permissions to perform this action.",not_found:"The requested resource was not found.",rate_limit:"Too many requests. Please wait a moment and try again."}},v5={fallback:{title:"We couldn't load this information",description:"Please try again or contact support if the problem persists.",retry:"Retry"},mfa_error:{title:"Additional verification required",description:"Additional verification could not be completed. Please contact support."},mfa:{title:"Verify your account",subtitle:"You must provide a second factor from one of the options below to perform this action.",authenticator_type:{otp:"Authenticator","recovery-code":"Recovery Codes",email:"Email OTP",sms:"SMS",push:"Push Notification with Guardian App",voice:"Voice"},no_authenticators:"No authentication methods available.",verify_button:"Verify",enroll_button:"Set up",cancel:"Cancel",back:"Back",continue:"Continue",challenge:{otp_description:"Please enter the one-time code shown in your authenticator app.",phone_title:"Verify your phone number",code_sent_description:"Please enter the one-time code we just sent to ${name}.",email_title:"Verify your email address",push_title:"We just sent you a push notification",push_description:"Verify it's you on your Guardian App",push_waiting:"Waiting for verification...",recovery_code_description:"Enter your saved recovery codes.",resend_prompt:"Didn't receive the code?",resend:"Resend",verifying:"Verifying..."},enroll:{install_title:"Setup Authenticator",install_description:"In order to continue, install the Auth0 Guardian app via the app store from your mobile device.",app_store:"App Store",google_play:"Google Play",phone_label:"Your phone number",phone_description:"We will send a verification code to this number.",phone_title:"Enter your phone number for SMS OTP",email_label:"Your Email Address",email_description:"We will send a verification code to this email address.",email_title:"Enter your email address for email OTP",enrolling:"Setting up...",scan_description:"Scan this QR code with your authenticator app.",scan_helper:"Complete the setup by scanning this code with your Authenticator App. If you can't scan the code, manually enter the code below.",push_scan_description:"Scan this QR code with the Guardian app",qr_alt:"Enrollment QR code",recovery_title:"Generate recovery codes",recovery_description:"Copy these recovery codes and store them somewhere safe. You will need them if you ever lose access to your authentication method.",recovery_confirmed:"I have safely recorded these codes",invalid_email:"Please enter a valid email address.",invalid_phone_number:"Please enter a valid phone number."}}},A5={domain_table:{header:{title:"Domains",description:"Add a domain to enhance security and streamline login by directing users to your identity provider based on their email domain.",create_button_text:"Add Domain"},table:{empty_message:"You do not have any domains.",columns:{domain:"Domain Name",status:"Status"},actions:{configure_button_text:"Configure",view_button_text:"View",verify_button_text:"Verify",delete_button_text:"Delete"}},notifications:{general_error:"There was an issue processing your request. Please try again or contact support if the issue persists.",fetch_providers_error:"There was an issue fetching providers. Please try again or contact support if the issue persists.",fetch_domains_error:"There was an issue fetching domains. Please try again or contact support if the issue persists.",domain_create:{success:"${domainName} has been created.",error:"There was an issue creating the domain.",on_before:"Domain is not valid."},domain_verify:{success:"${domainName} has been verified.",error:"There was an issue verifying the domain.",on_before:"Domain verify validation is not correct.",verification_failed:"${domainName} could not be verified. Please wait and try again or check with your DNS provider."},domain_delete:{success:"${domainName} has been deleted.",error:"There was an issue deleting the domain."},domain_associate_provider:{success:"${domainName} enabled for ${idp} provider.",error:"There was an issue associating the domain to the provider.",on_before:"Domain associate to provider validation is not correct."},domain_delete_provider:{success:"${domainName} disabled for ${idp} provider.",error:"There was an issue removing the domain from the provider.",on_before:"Domain delete from provider validation is not correct."}}},domain_create:{modal:{title:"Add a Domain",field:{label:"Domain URL",placeholder:"domain-name.com",error:"Please enter a valid domain"},actions:{cancel_button_text:"Cancel",create_button_text:"Add Domain"}}},domain_configure_providers:{modal:{title:"Configure ${domain}",description:"Direct users with an ${domain} email domain to your identity provider for authentication for the selected providers.",table:{empty_message:"You do not have any providers.",columns:{name:"Name",provider:"Identity Provider"},actions:{add_provider_button_text:"Add a Provider",view_provider_button_text:"View",enable_provider_tooltip:"Toggle to enable the domain for this provider",disable_provider_tooltip:"Toggle to disable the domain for this provider"}},actions:{close_button_text:"Close"}}},domain_delete:{modal:{title:"Delete Domain",description:{pending:"${domainName} is pending verification and may take up to 48 hours to process. Are you sure you want to delete this domain?",verified:"Deleting ${domainName} may disrupt login flows for users. Are you sure you want to delete this domain?"},actions:{cancel_button_text:"Cancel",delete_button_text:"Delete"}}},domain_verify:{modal:{title:"Add DNS records for ${domainName}",txt_record_name:{label:"TXT Record Name"},txt_record_content:{label:"TXT Record Content"},verification_status:{label:"Verification Status:",pending:"Pending",description:"Your domain is pending verification. Click 'Verify' to refresh the status, or check back later. DNS changes may take up to 48 hours, but typically process faster."},actions:{verify_button_text:"Verify",delete_button_text:"Delete",done_button_text:"Done"},errors:{verification_failed:"${domainName} could not be verified. Please wait and try again or check with your DNS provider."}}},shared:{domain_statuses:{pending:"Pending",verified:"Verified",failed:"Failed"}}},y5={organization_details:{sections:{settings:{title:"Settings",fields:{name:{label:"Name",placeholder:"Enter organization name",helper_text:"A human-readable identifier for the organization, used by end users to direct them to their organization in your application.",error:"Only lowercase letters, numbers, hyphens, and underscores are allowed (e.g., my-org-01)"},display_name:{label:"Display Name",placeholder:"Enter display name",helper_text:"The name displayed to end users of this organization.",error:"Please enter a valid display name"}}},branding:{title:"Branding",fields:{logo:{label:"Organization Logo",helper_text:"The logo that will be displayed to end-users for this organization in any interaction with them.",error:"Please enter a valid HTTPS URL for the logo"},primary_color:{label:"Primary Color",helper_text:"The primary color for buttons displayed to end users of this organization in your application's authentication flows.",error:"Please enter a valid color format"},page_background_color:{label:"Page Background Color",helper_text:"The page background color displayed to end users of this organization in your application's authentication flows.",error:"Please enter a valid color format"}}}},unsaved_changes_text:"Unsaved changes",submit_button_label:"Save",cancel_button_label:"Discard"},organization_delete:{title:"Delete ${organizationName}",description:"Once confirmed, this operation cannot be undone.",delete_button_label:"Delete",modal_title:"Delete ${organizationName}",modal_description:"Are you sure you want to delete ${organizationName}? Users will be maintained but membership to this organization will be removed. Once confirmed, this action cannot be undone.",organization_name_field_placeholder:"Type in the organization name",organization_name_field_label:"Organization Name",organization_name_field_error:'Please type "${organizationName}" to confirm deletion',cancel_button_label:"Cancel"},organization_details_edit:{header:{back_button_text:"Back to Organizations",title:"${organizationName}"},save_organization_changes_message:"The changes have been saved for ${organizationName}.",organization_changes_error_message:"There was an issue processing your request. ${message}.",organization_changes_error_message_generic:"There was an issue processing your request. Please try again or contact support if the issue persists."}},b5={sso_provider_table:{header:{title:"Single Sign-On",description:"Set up and manage SSO access for your organization.",create_button_text:"Add Provider"},table:{empty_message:"You do not have any providers.",columns:{name:"Name",identity_provider:"Identity Provider",display_name:"Display Name"},actions:{edit_button_text:"Edit",delete_button_text:"Delete",remove_button_text:"Remove from organization",enabled_tooltip:"Toggle to disable the SSO provider",disabled_tooltip:"Toggle to enable the SSO provider"}},create_consent_modal:{title:"Before creating the provider, please note:",description:"Creating this provider will enable SSO access to ${organizationName}. To prioritize security, assign access and test the provider as soon as possible once the provider is active.",actions:{cancel_button_text:"Cancel",process_button_text:"Proceed"}}},create_sso_provider:{steps:{one:"Identity Provider",two:"Provider Details",three:"Configure Provider"},header:{title:"Add a Provider",back_button_text:"Back to Single Sign-On"},nextButtonLabel:"Next",previousButtonLabel:"Back",completeButtonLabel:"Create Provider",notifications:{general_error:"There was an issue processing your request. Please try again or contact support if the issue persists.",provider_create_success:"${providerName} has been created.",provider_create_duplicated_provider_error:"${providerName} provider already exists. Please choose a different name.",provider_create_discovery_failure:"${domain} not found. Check the domain and try again."},provider_select:{title:"Select Your Identity Provider",description:"Choose the identity provider you plan to integrate with Auth0 to access step-by-step configuration instructions."},provider_details:{title:"Provider Details",description:"Provide a recognizable name and a permanent identifier to help you manage and reference this provider later.",fields:{name:{label:"Name",placeholder:"Enter an identifier",helper_text:"A human-readable identifier for the provider. This cannot be changed.",error:"Please enter a valid organization name"},display_name:{label:"Display Name",placeholder:"Enter display name",helper_text:"The name displayed to end users of this provider.",error:"Please enter a valid display name"}}},provider_configure:{title:"Configure Provider",description:"Establish a connection between your identity provider and Auth0.",fields:{common:{show_as_button:{label:"Show as button",helper_text:"Display this connection as a button on the login page"},assign_membership_on_login:{label:"Assign membership on login",helper_text:"Automatically grant organization membership to users who log in through this connection"}},okta:{domain:{label:"Okta Domain",placeholder:"domain-name.okta.com",helper_text:"Where do I find the Okta Domain?",error:"Please enter a valid Okta domain"},client_id:{label:"Client ID",placeholder:"Enter your client ID",helper_text:"Unique identifier for client application or service integration. Where do I find the Client ID?",error:"Please enter a valid client ID"},client_secret:{label:"Client Secret",placeholder:"Enter your client secret",helper_text:"Confidential token used for client authentication. Where do I find the Client Secret?",error:"Please enter a valid client secret"},callback_url:{label:"Callback URL",placeholder:"https://staff0.local.dev.auth0.com/login/callback",helper_text:"You may need to configure the Okta tenant with this callback URL.",error:"Please enter a valid URL"}},"google-apps":{domain:{label:"Google Workspace Domain",placeholder:"your-google-workspace-domain.com",error:"Please enter a valid Google Workspace domain"},client_id:{label:"Client ID",placeholder:"Enter your client ID",helper_text:"Unique identifier for client application or service integration.",error:"Please enter a valid client ID"},client_secret:{label:"Client Secret",placeholder:"Enter your client secret",helper_text:"Confidential token used for client authentication.",error:"Please enter a valid client secret"},callback_url:{label:"Callback URL",placeholder:"https://staff0.local.dev.auth0.com/login/callback",helper_text:"You may need to configure the Google Workspace tenant with this callback URL.",error:"Please enter a valid URL"}},waad:{tenant_domain:{label:"Microsoft Entra ID Domain",placeholder:"your-entra-id-domain.com",error:"Please enter a valid Microsoft Entra ID domain"},client_id:{label:"Client ID",placeholder:"Enter your client ID",helper_text:"Unique identifier for client application or service integration.",error:"Please enter a valid client ID"},client_secret:{label:"Client Secret",placeholder:"Enter your client secret",helper_text:"Confidential token used for client authentication.",error:"Please enter a valid client secret"},callback_url:{label:"Callback URL",placeholder:"https://staff0.local.dev.auth0.com/login/callback",helper_text:"You may need to configure the Entra ID tenant with this callback URL.",error:"Please enter a valid URL"}},oidc:{discovery_url:{label:"OpenID Provider Configuration Endpoint",placeholder:"https://example.com/.well-known/openid-configuration",helper_text:"Enter the URL of the discovery document of the OpenID Connect provider you want to connect with.",error:"Please enter a valid discovery URL"},type:{label:"Communication Channel",helper_text:"Select whether authentication exchanges occur via server-to-server communication (Back Channel) or through the browser using Implicit Flow with Form Post (Front Channel).",options:{back_channel:{label:"Back Channel"},front_channel:{label:"Front Channel"}}},client_id:{label:"Client ID",placeholder:"Enter your client ID",helper_text:"Unique identifier for client application or service integration.",error:"Please enter a valid client ID"},client_secret:{label:"Client Secret",placeholder:"Enter your client secret",helper_text:"Confidential token used for client authentication.",error:"Please enter a valid client secret"}},samlp:{meta_data_source:{label:"Metadata Source",options:{meta_data_url:{label:"Metadata URL"},meta_data_file:{label:"Metadata File"}}},meta_data_url:{label:"Metadata URL",placeholder:"https://example.com/samlp/metadata.xml",helper_text:"Location to retrieve SAML SSO connection information for integration.",error:"Please enter a valid metadata URL"},single_sign_on_login_url:{label:"Single Sign-On Login URL",placeholder:"https://example.com/idp/saml/",helper_text:"Endpoint for initiating secure authentication in SAML SSO connections.",error:"Please enter a valid SSO login URL"},cert:{label:"Signing Certificate",placeholder:"Upload Signing Certificate",helper_text:"SAML X.509 public key encoded in PEM or CER format.",error:"Please upload a valid signing certificate"},advanced_settings:{title:"Advanced Settings",sign_request:{label:"Sign Request",helper_text_metadata_file:"When enabled, the SAML authentication request will be signed. Download the certificate and provide it to the SAMLP that will receive the signed assertion to validate the signature. This needs to be enabled first in the SAMLP. Once enabled, share the metadata URL for integration.",helper_text_metadata_url:"When enabled, the SAML authentication request will be signed. Download the certificate and provide it to the SAMLP that will receive the signed assertion to validate the signature."},request_protocol_binding:{label:"Request Protocol Binding",placeholder:"HTTP-Post",helper_text:"The SAML protocol binding to use for authentication requests.",error:"Please select a protocol binding"},sign_request_algorithm:{label:"Sign Request Algorithm",placeholder:"RSA-SHA256",helper_text:"The algorithm used to sign SAML authentication requests.",error:"Please select a signing algorithm"},sign_request_algorithm_digest:{label:"Sign Request Algorithm Digest",placeholder:"SHA256",helper_text:"The digest algorithm used for SAML request signing.",error:"Please select a digest algorithm"}},icon_url:{label:"Icon URL",placeholder:"Enter icon URL",helper_text:"URL for the provider icon displayed to users.",error:"Please enter a valid URL"}},adfs:{meta_data_source:{label:"ADFS Metadata Source",options:{meta_data_url:{label:"ADFS URL"},meta_data_file:{label:"Metadata File"}}},meta_data_url:{label:"Metadata URL",placeholder:"https://example.com/FederationMetadata/2007-06/FederationMetadata.xml",helper_text:"Location to retrieve WS-Fed SSO connection information for integration.",error:"Please enter a valid metadata URL"},meta_data_location_url:{label:"Metadata Location URL",placeholder:"https://HOSTNAME/FederationMetadata/2007-06/FederationMetadata.xml",helper_text:"Location to retrieve WS-Fed SSO connection information for integration.",error:"Please enter a valid metadata location URL"},federation_metadata_file:{label:"Federation Metadata File",placeholder:"Upload Federation Metadata File",helper_text:"Digital credential used for secure identity authentication.",error:"Please upload a valid federation metadata file"},upload_button_label:"Upload"},"ping-federate":{ping_federate_baseurl:{label:"Single Sign-On Login URL",placeholder:"https://example.com/idp/SSO.saml2",helper_text:"Endpoint for initiating secure authentication in PingFederate SSO connections.",error:"Please enter a valid SSO login URL"},sign_cert:{label:"Signing Certificate",placeholder:"Upload Signing Certificate",helper_text:"Digital credential used for secure identity authentication.",error:"Please upload a valid signing certificate"},advanced_settings:{title:"Advanced Settings",sign_request:{label:"Sign Request",helper_text:"When enabled, the SAML authentication request will be signed. Download the certificate and provide it to the SAMLP that will receive the signed assertion to validate the signature. This needs to be enabled first in the SAMLP. Once enabled, share the metadata URL for integration.",error:"Please select an option"},sign_request_algorithm:{label:"Sign Request Algorithm",placeholder:"RSA-SHA256",helper_text:"The algorithm used to sign SAML authentication requests to PingFederate.",error:"Please select a signing algorithm"},sign_request_algorithm_digest:{label:"Sign Request Algorithm Digest",placeholder:"SHA256",helper_text:"The digest algorithm used for PingFederate request signing.",error:"Please select a digest algorithm"}}}}}},edit_sso_provider:{header:{back_button_text:"Back to Single Sign-On",enable_provider_tooltip_text:"Toggle to enable the provider.",disable_provider_tooltip_text:"Toggle to disable the provider."},mappings:{title:"Mapping",description:"Ensure that the correct user attributes are passed from the identity provider to the service provider.",description_provider_tab:"Establish a connection between your identity provider and Auth0.",external_namespace:{label:"External Namespace"},required:{title:"Required Attributes",description:"Ensure that a valid ${strategy} attribute is mapped to the following attributes.",table:{columns:{attribute_name_label:"Attribute Name",external_field_label:"External Field"},tags:{updated:{label:"Updated",tooltip:"This attribute has been updated. Update your identity provider configuration."},removed:{label:"Removed",tooltip:"This attribute has been removed. Remove it from your identity provider configuration."},new:{label:"New",tooltip:"This attribute has been added. Add it to your identity provider configuration."}}}},optional:{title:"Optional Attributes",description:"Mapping these attributes will enhance the user profile but is not required.",table:{columns:{attribute_name_label:"Attribute Name",external_field_label:"External Field"},tags:{updated:{label:"Updated",tooltip:"This attribute has been updated. Update your identity provider configuration."},removed:{label:"Removed",tooltip:"This attribute has been removed. Remove it from your identity provider configuration."},new:{label:"New",tooltip:"This attribute has been added. Add it to your identity provider configuration."}}}}},tabs:{sso:{name:"Single Sign-On",content:{title:"Single Sign-On",description:"Manage and configure single sign-on.",attribute_sync_alert:{title:"Mappings for single sign-on have been updated.",description:"Please review the attributes and update your identity provider configuration to avoid login issues. Once complete, sync the updated mappings.",sync_button_label:"Sync",sync_modal:{title:"Sync Updated Mappings",description:"Syncing will update your provider configuration with the latest mappings. This action cannot be undone.",actions:{cancel_button_label:"Cancel",proceed_button_label:"Proceed"}}}}},provisioning:{name:"Provisioning",content:{header:{title:"Provisioning",description:"Set up provisioning to allow user profile syncing to your organization.",guided_setup_button_label:"Guided Setup",provider_disabled_tooltip:"Enable provider to create provisioning",enable_provisioning_tooltip:"Toggle to enable provisioning",disable_provisioning_tooltip:"Toggle to disable provisioning"},attribute_sync_alert:{title:"Mappings for provisioning have been updated.",description:"Please review the attributes and update your identity provider configuration to avoid login issues. Once complete, sync the updated mappings. You will need to generate new tokens and re-add them to your identity provider.",sync_button_label:"Sync",sync_modal:{title:"Sync Updated Mappings",description:"Syncing will update your provisioning configuration with the latest mappings and delete your existing tokens. You will need to generate new tokens and re-add them to your identity provider. This action cannot be undone.",actions:{cancel_button_label:"Cancel",proceed_button_label:"Proceed"}}},delete:{modal:{title:"Disable provisioning",content:{description:"Are you sure you want to disable provisioning? This will permanently delete the provisioning configuration and revoke access for any clients using provisioning with this provider."},actions:{cancel_button_label:"Cancel",delete_button_label:"Proceed"}}},details:{manage_tokens:{title:"Bearer Tokens",description:"Generate a bearer token to provide your identity provider. You can create up to two tokens.",generate_button_label:"Generate Token",max_tokens_tooltip:"Maximum 2 tokens allowed",empty_state:{title:"No tokens created yet",description:"Generate a bearer token to authenticate SCIM requests from your identity provider."},table:{token_id_label:"Token ID",created_label:"Created",expires_label:"Expires",actions_label:"Actions"},token_item:{token_prefix:"Token",never_expire:"This token will never expire.",last_used:"Last used: Never",status_active:"Active",status_expired:"Expired",delete_button_label:"Delete"},create_modal:{title:"Bearer Token Information",copy_and_close_button_label:"Copy and Close",content:{description:"Copy the bearer token to provide your identity provider. It will not be displayed again upon closing this dialog.",field:{label:"Token"}}},delete_modal:{title:"Delete token ${tokenId}",cancel_button_label:"Cancel",delete_button_label:"Delete Token",content:{confirmation:"Are you sure you want to delete token ${tokenId}? This action cannot be undone.",description:"To avoid downtime, consider creating a second token and supplying it to your provisioning client before deleting this one."}}},fields:{user_id_attribute:{label:"User ID Attribute",helper_text:"The attribute that uniquely identifies a user."},scim_endpoint_url:{label:"SCIM Endpoint URL"}}}}},domains:{name:"Domains",content:{title:"Domains",description:"Enhance security and streamline login by directing users to your identity provider based in their email domain.",create_button_text:"Add Domain",table:{empty_message:"You do not have any domains",columns:{name:"Domain Name",status:"Status",verify:"Verify"},actions:{enable_domain_tooltip:"Toggle to enable this domain",disable_domain_tooltip:"Toggle to disable this domain"},domain_statuses:{pending:"Pending",verified:"Verified",failed:"Failed"}},domain_create:{modal:{title:"Add a Domain",field:{label:"Domain URL",placeholder:"domain-name.com",error:"Please enter a valid domain"},actions:{cancel_button_text:"Cancel",create_button_text:"Add Domain"}}},domain_delete:{modal:{title:"Delete Domain",description:{pending:"${domainName} is pending verification and may take up to 48 hours to process. Are you sure you want to delete this domain?",verified:"Deleting ${domainName} may disrupt login flows for users. Are you sure you want to delete this domain? This action cannot be undone."},actions:{cancel_button_text:"Cancel",delete_button_text:"Delete"}}},domain_verify:{modal:{title:"Add DNS records for ${domainName}",txt_record_name:{label:"TXT Record Name"},txt_record_content:{label:"TXT Record Content"},verification_status:{label:"Verification Status:",pending:"Pending",description:"Your domain is pending verification. Click 'Verify' to refresh the status, or check back later. DNS changes may take up to 48 hours, but typically process faster."},actions:{verify_button_text:"Verify",delete_button_text:"Delete",done_button_text:"Done"},errors:{verification_failed:"${domainName} could not be verified. Please wait and try again or check with your DNS provider."}}}}}},provider_details:{save_button_label:"Save"}},sso_provider_details:{unsaved_changes_text:"Unsaved changes",submit_button_label:"Save"},delete_sso_provider:{title:"Delete this provider",description:"Once confirmed, this operation cannot be undone.",delete_button_label:"Delete",modal:{title:"Delete ${providerName}",description:"Users who sign in through this provider will lose access. The action cannot be undone. Are you sure you want to delete this provider?",content:{description:"Type in the name of the provider to confirm.",field:{label:"Provider Name",placeholder:"Type in the provider name"}},actions:{cancel_button_label:"Cancel",delete_button_label:"Delete"}}},remove_sso_provider:{title:"Remove this provider from the organization",description:"Once confirmed, this operation cannot be undone.",remove_button_label:"Delete",modal:{title:"Remove ${providerName} from ${organizationName}",description:"This will revoke access to ${providerName} for all users in this organization. Users will not be deleted but will no longer be able to sign in using this provider",content:{description:"Type in the name of the provider to confirm.",field:{label:"Provider Name",placeholder:"Type in the provider name"}},actions:{cancel_button_text:"Cancel",remove_button_text:"Proceed"}}},notifications:{delete_success:"${providerName} has been deleted.",remove_success:"${providerName} has been removed from ${organizationName}",update_success:"Changes to ${providerName} have been saved.",general_error:"There was an issue processing your request. Please try again or contact support if the issue persists.",domain_create:{success:"${domainName} has been created.",error:"There was an issue creating the domain.",on_before:"Domain is not valid."},domain_verify:{success:"${domainName} has been verified.",error:"There was an issue verifying the domain.",on_before:"Domain verify validation is not correct.",verification_failed:"${domainName} could not be verified. Please wait and try again or check with your DNS provider."},domain_delete:{success:"${domainName} has been deleted.",error:"There was an issue deleting the domain."},domain_associate_provider:{success:"${domain} enabled for ${idp}"},domain_delete_provider:{success:"${domain} disabled for ${idp}"},provisioning_disabled_success:"Provisioning has been disabled.",scim_token_delete_sucess:"Token has been deleted.",scim_token_create_success:"Token generated successfully",sso_attributes_sync_success:"The provider mappings have been updated.",provisioning_attributes_sync_success:"The provisioning mappings have been updated."}},x5={title:"Multi-Factor Authentication methods",description:"Extra protection for your account and your identity",no_active_mfa:"No active MFA factors enrolled.",component_error_title:"Error loading Multi-Factor Authentication component",component_error_description:`We're having trouble loading your multi-factor authentication methods. +Please refresh the page and try again`,loading:"Loading...",delete:"Delete",enroll:"Enroll",submit:"Submit",update:"Update",remove:"Remove",enrolling:"Enrolling...",enrolled:"Enrolled",enabled:"ENABLED",enrollment:"Enrollment",confirmation:"Confirmation",remove_factor:"Enrollment removed successfully.",enroll_factor:"Enrolled successfully.",enroll_totp_mfa:"Enroll OTP MFA",delete_factor:"Delete authenticator ${factorName}",delete_mfa_title:"Remove existing Authenticator",delete_mfa_phone_consent:"Are you sure you want to remove this Phone number for SMS?",delete_mfa_email_consent:"Are you sure you want to remove this Email?",delete_mfa_totp_consent:"Are you sure you want to remove this authenticator?","delete_mfa_push-notification_consent":"Are you sure you want to remove this push notification?","delete_mfa_recovery-code_consent":"Are you sure you want to remove this recovery code?",cancel:"Cancel",close:"Close",next:"Next",back:"Back","yes-remove":"Yes, remove",ok:"Ok","app-store":"App Store","google-play":"Google Play",confirm:"Confirm",continue:"Continue",deleting:"Deleting...",errors:{factors_loading_error:"Error loading MFA factors!",unknown_error:"Unknown error occurred",delete_factor:"Delete authenticator failed",failed:"failed: ${message}",phone_number_required:"Phone number is required for SMS enrollment.",email_required:"Email is required for Email enrollment.",invalid_email:"Invalid email address",invalid_phone_number:"Invalid phone number",unsupported_mfa_type:"Unsupported MFA type: ${factorName}","push-notification":{too_many_entities:"You reached the limit of entities of the push notification type for this user.",unsupported_challenge_type:'Auth0 Verifier is disabled for your tenant. You can turn it on from dashboard turning on "Push notifications" on Guardian MFA section.',invalid_request:"Missing required parameter",authorization_pending:"Authorization pending: please repeat the request in a few seconds."},totp:{invalid_request:"Missing required parameter",too_many_entities:"You reached the limit of entities of the totp type for this user.",unsupported_challenge_type:'OTP Verifier is disabled for your tenant. You can turn it on from dashboard turning on "Push notifications" on Guardian MFA section (Push notications include OTP).',invalid_grant:"Invalid Otp Code"},phone:{unsupported_challenge_type:'SMS Verifier is disabled for your tenant. You can turn it on from dashboard turning on "SMS" on Guardian MFA section.',bad_gateway:"The phone number is invalid.",too_many_entities:"You reached the limit of entities of the sms type for this user."},email:{expired_token:"Verification code is expired",invalid_grant:"Invalid Code",access_denied:"Could not find the requested authenticator",too_many_entities:"You reached the limit of entities of the email type for this user."}},phone:{title:"Phone Message",description:"No phone number has been added.","button-text":"Add Phone for SMS"},"push-notification":{title:"Push Notification using Auth0 Guardian",description:"No push authentication has been added.","button-text":"Add Push Authentication"},totp:{title:"One-time Password",description:"No authenticator has been added.","button-text":"Add Authenticator App"},email:{title:"Email",description:"No email has been added.","button-text":"Add Email"},duo:{title:"Duo Security",description:"Use your DUO account for Multi-factor Authentication."},"webauthn-roaming":{title:"WebAuthn with FIDO Security Keys",description:"Use WebAuthn-compliant security keys (e.g., FIDO2) as a second factor.","button-text":"Add WebAuthn with FIDO Security Keys"},"webauthn-platform":{title:"WebAuthn with FIDO Device Biometrics",description:"Use WebAuthn-compliant device biometrics as a second factor.","button-text":"Add WebAuthn with FIDO Device Biometrics"},"recovery-code":{title:"Recovery Code",description:"Use a unique recovery code to regain account access.","button-text":"Add Recovery Code"},enrollment_form:{email_address:"Email Address",phone_number:"Phone Number",send_code:"Send Code",sending:"Sending...",enroll_title:"Verify it’s you",enroll_email_placeholder:"Enter email address",enroll_email_description:"Enter your email to receive a verification code",enroll_sms_placeholder:"Enter phone number",enroll_sms_description:"Enter your phone number to receive a verification code",show_auth0_guardian_title:"Scan this QR code with your Auth0 Guardian App to register this Authentication method or copy the url.",recovery_code_description:"Copy this recovery code and keep it somewhere safe. You'll need it if you ever need to log in without your device.",show_otp:{title:"Scan this QR code with your Authenticator App to register this Authentication method or copy the code.",save_recovery:"Save these recovery codes!",enter_code:"Enter the code from your authenticator app",one_time_passcode:"One-Time Passcode",verify_code:"Verify Code",copy_as_code:"Copy as Code",verifying:"Verifying...",enter_verify_code:"Enter the 6-digit code we sent to ${verifier}",enter_opt_code:"Enter the code from your authenticator",install_guardian_description:"In order to continue, install the Auth0 Guardian app via the app store from your mobile device"}}},_5={header:{title:"Members",description:"Manage the members of your organization."},invite_button:"Invite Member",tabs:{members:"Members",invitations:"Invitations"},member:{table:{columns:{name:"Name",email:"Email",roles:"Roles"},empty_message:"No members found."},remove:{title:"Remove Member",description:"Are you sure you want to remove ${name} from this organization?",confirm_button:"Remove",cancel_button:"Cancel",success:"${name} has been removed from the organization."},error:{fetch_failed:"Failed to load members. Please try again.",remove_failed:"Failed to remove member. Please try again."}},invitation:{table:{columns:{email:"Email",status:"Status",inviter:"Invited By",created_at:"Created At",expires_at:"Expires At",roles:"Roles"},empty_message:"No pending invitations.",search_placeholder:"Search by email...",filter_by_role:"Filter By Role",all_roles:"All",reset_filter:"Reset",showing_results:"Showing ${start}-${end} of ${total}",status_pending:"Pending",status_expired:"Expired"},actions:{menu_label:"Actions",view_details:"View Details",copy_url:"Copy Invitation URL",revoke_and_resend:"Revoke and Resend",revoke:"Revoke Invitation"},create:{title:"Invite Member",description:"Send an invitation to join this organization.",email_label:"Email Address",email_placeholder:"Enter email address and press Enter",email_helper:"Add up to 10 members in a comma-separated list.",email_limit_error:"You can add up to 10 email addresses.",email_invalid_error:"Please enter a valid email address.",email_duplicate_error:"This email has already been added.",email_required_error:"Please enter at least one email address.",roles_label:"Roles",roles_placeholder:"Select roles (optional)",provider_label:"Provider",provider_placeholder:"Select provider (optional)",provider_helper:"If none is selected, the member can log in with any provider.",submit_button:"Send Invite",creating:"Creating...",cancel_button:"Cancel",success:"Invitation sent to ${email}."},details:{title:"Invitation Details",email_label:"Email",status_label:"Status",roles_label:"Roles",provider_label:"Identity Provider",created_at_label:"Created",expires_at_label:"Expires",invited_by_label:"Invited By",invitation_url_label:"Invitation URL",copy_url_button:"Copy",close_button:"Close",revoke_button:"Revoke Invitation",resend_button:"Revoke and Resend"},revoke:{title:"Revoke Invitation",description:"Are you sure you want to revoke the invitation to ${email}?",confirm_button:"Revoke",cancel_button:"Cancel",success:"Invitation for ${email} has been revoked."},revoke_resend:{title:"Revoke and Resend Invitation",description:"Are you sure you want to revoke the current invitation and send a new one to ${email}?",confirm_button:"Proceed",cancel_button:"Cancel"},success:{url_copied:"Invitation URL copied to clipboard.",invitation_resent:"Invitation resent to ${email}."},error:{fetch_failed:"Failed to load invitations. Please try again.",create_failed:"Failed to send invitation. Please try again.",revoke_failed:"Failed to revoke invitation. Please try again.",resend_failed:"Failed to resend invitation. Please try again.",revoke_resend_failed:"Failed to revoke and resend invitation. Please try again.",copy_url_failed:"Failed to copy invitation URL. Please try again."}}},yV={common:g5,gate_keeper:v5,domain_management:A5,organization_management:y5,idp_management:b5,mfa:x5,member_management:_5};const bV=Object.freeze(Object.defineProperty({__proto__:null,common:g5,default:yV,domain_management:A5,gate_keeper:v5,idp_management:b5,member_management:_5,mfa:x5,organization_management:y5},Symbol.toStringTag,{value:"Module"}));var C5={copy:"Copier",copied:"Copié!",error:{generic:"Un problème est survenu lors du traitement de votre demande. Veuillez réessayer ou contacter le support si le problème persiste.",bad_request:"La demande est invalide. Veuillez vérifier votre saisie et réessayer.",missing_token:"Votre session a expiré. Veuillez vous reconnecter.",insufficient_scope:"Vous n'avez pas les autorisations de portée requises pour effectuer cette action.",forbidden:"Vous n'avez pas les autorisations pour effectuer cette action.",not_found:"La ressource demandée n'a pas été trouvée.",rate_limit:"Trop de demandes. Veuillez patienter un instant et réessayer."}},w5={fallback:{title:"Nous n'avons pas pu charger cette information",description:"Veuillez réessayer ou contacter le support si le problème persiste.",retry:"Réessayer"},mfa:{title:"Vérifiez votre compte",subtitle:"Vous devez fournir un second facteur parmi les options ci-dessous pour effectuer cette action."}},E5={domain_table:{header:{title:"Domaines",description:"Ajoutez un domaine pour renforcer la sécurité et simplifier la connexion en dirigeant les utilisateurs vers votre fournisseur d'identité en fonction de leur domaine de courriel.",create_button_text:"Ajouter un domaine"},table:{empty_message:"Vous n'avez aucun domaine.",columns:{domain:"Nom de domaine",status:"Statut"},actions:{configure_button_text:"Configurer",view_button_text:"Voir",verify_button_text:"Vérifier",delete_button_text:"Supprimer"}},notifications:{general_error:"Un problème est survenu lors du traitement de votre demande. Veuillez réessayer ou contacter le support si le problème persiste.",fetch_providers_error:"Un problème est survenu lors de la récupération des fournisseurs. Veuillez réessayer ou contacter le support si le problème persiste.",fetch_domains_error:"Un problème est survenu lors de la récupération des domaines. Veuillez réessayer ou contacter le support si le problème persiste.",domain_create:{success:"${domainName} a été créé.",error:"Un problème est survenu lors de la création du domaine.",on_before:"Le domaine n'est pas valide."},domain_verify:{success:"${domainName} a été vérifié.",error:"Un problème est survenu lors de la vérification du domaine.",on_before:"La validation de la vérification du domaine n'est pas correcte.",verification_failed:"${domainName} n'a pas pu être vérifié. Veuillez patienter et réessayer ou vérifier auprès de votre fournisseur DNS."},domain_delete:{success:"${domainName} a été supprimé.",error:"Un problème est survenu lors de la suppression du domaine."},domain_associate_provider:{success:"${domainName} activé pour le fournisseur ${idp}.",error:"Un problème est survenu lors de l'association du domaine au fournisseur.",on_before:"La validation de l'association du domaine au fournisseur n'est pas correcte."},domain_delete_provider:{success:"${domainName} désactivé pour le fournisseur ${idp}.",error:"Un problème est survenu lors de la suppression du domaine du fournisseur.",on_before:"La validation de la suppression du domaine du fournisseur n'est pas correcte."}}},domain_create:{modal:{title:"Ajouter un domaine",field:{label:"URL du domaine",placeholder:"nom-de-domaine.com",error:"Veuillez entrer un domaine valide"},actions:{cancel_button_text:"Annuler",create_button_text:"Ajouter un domaine"}}},domain_configure_providers:{modal:{title:"Configurer ${domain}",description:"Dirigez les utilisateurs avec un domaine de courriel ${domain} vers votre fournisseur d'identité pour l'authentification pour les fournisseurs sélectionnés.",table:{empty_message:"Vous n'avez aucun fournisseur.",columns:{name:"Nom",provider:"Fournisseur d'identité"},actions:{add_provider_button_text:"Ajouter un fournisseur",view_provider_button_text:"Voir",enable_provider_tooltip:"Basculer pour activer le domaine pour ce fournisseur",disable_provider_tooltip:"Basculer pour désactiver le domaine pour ce fournisseur"}},actions:{close_button_text:"Fermer"}}},domain_delete:{modal:{title:"Supprimer le domaine",description:{pending:"${domainName} est en attente de vérification et peut prendre jusqu'à 48 heures pour être traité. Êtes-vous sûr de vouloir supprimer ce domaine ?",verified:"La suppression de ${domainName} peut perturber les flux de connexion des utilisateurs. Êtes-vous sûr de vouloir supprimer ce domaine ?"},actions:{cancel_button_text:"Annuler",delete_button_text:"Supprimer"}}},domain_verify:{modal:{title:"Ajouter des enregistrements DNS pour ${domainName}",txt_record_name:{label:"Nom de l'enregistrement TXT"},txt_record_content:{label:"Contenu de l'enregistrement TXT"},verification_status:{label:"Statut de vérification :",pending:"En attente",description:"Votre domaine est en attente de vérification. Cliquez sur 'Vérifier' pour actualiser le statut, ou revenez plus tard. Les modifications DNS peuvent prendre jusqu'à 48 heures, mais sont généralement traitées plus rapidement."},actions:{verify_button_text:"Vérifier",delete_button_text:"Supprimer",done_button_text:"Terminé"},errors:{verification_failed:"${domainName} n'a pas pu être vérifié. Veuillez patienter et réessayer ou vérifier auprès de votre fournisseur DNS."}}},shared:{domain_statuses:{pending:"En attente",verified:"Vérifié",failed:"Échoué"}}},S5={organization_details:{sections:{settings:{title:"Paramètres",fields:{name:{label:"Nom",placeholder:"Entrez le nom de l'organisation",helper_text:"Un identifiant lisible par l'humain pour l'organisation, utilisé par les utilisateurs finaux pour les diriger vers leur organisation dans votre application.",error:"Veuillez entrer un nom d'organisation valide"},display_name:{label:"Nom affiché",placeholder:"Entrez le nom affiché",helper_text:"Le nom affiché aux utilisateurs finaux de cette organisation.",error:"Veuillez entrer un nom affiché valide"}}},branding:{title:"Image de marque",fields:{logo:{label:"Logo de l'organisation",helper_text:"Le logo qui sera affiché aux utilisateurs finaux pour cette organisation lors de toute interaction avec eux.",error:"Veuillez entrer une URL HTTPS valide pour le logo"},primary_color:{label:"Couleur principale",helper_text:"La couleur principale pour les boutons affichés aux utilisateurs finaux de cette organisation dans les flux d'authentification de votre application.",error:"Veuillez entrer un format de couleur valide"},page_background_color:{label:"Couleur de fond de la page",helper_text:"La couleur de fond de la page affichée aux utilisateurs finaux de cette organisation dans les flux d'authentification de votre application.",error:"Veuillez entrer un format de couleur valide"}}}},unsaved_changes_text:"Modifications non enregistrées",submit_button_label:"Enregistrer",cancel_button_label:"Annuler"},organization_delete:{title:"Supprimer ${organizationName}",description:"Une fois confirmé, cette opération ne peut pas être annulée.",delete_button_label:"Supprimer",modal_title:"Supprimer ${organizationName}",modal_description:"Êtes-vous sûr de vouloir supprimer ${organizationName} ? Les utilisateurs seront conservés mais l'appartenance à cette organisation sera supprimée. Une fois confirmé, cette action ne peut pas être annulée.",organization_name_field_placeholder:"Saisissez le nom de l'organisation",organization_name_field_label:"Nom de l'organisation",organization_name_field_error:'Veuillez saisir "${organizationName}" pour confirmer la suppression',cancel_button_label:"Annuler"},organization_details_edit:{header:{back_button_text:"Retour aux organisations",title:"${organizationName}"},save_organization_changes_message:"Les modifications ont été enregistrées pour ${organizationName}.",organization_changes_error_message:"Un problème est survenu lors du traitement de votre demande. ${message}.",organization_changes_error_message_generic:"Un problème est survenu lors du traitement de votre demande. Veuillez réessayer ou contacter le support si le problème persiste."}},D5={sso_provider_table:{header:{title:"Connexion unique",description:"Configurez et gérez l'accès SSO pour votre organisation.",create_button_text:"Ajouter un fournisseur"},table:{empty_message:"Vous n'avez aucun fournisseur.",columns:{name:"Nom",identity_provider:"Fournisseur d'identité",display_name:"Nom affiché"},actions:{edit_button_text:"Modifier",delete_button_text:"Supprimer",remove_button_text:"Retirer de l'organisation",enabled_tooltip:"Basculer pour désactiver le provisioning",disabled_tooltip:"Basculer pour activer le provisioning"}},create_consent_modal:{title:"Avant de créer le fournisseur, veuillez noter :",description:"La création de ce fournisseur activera l'accès SSO à ${organizationName}. Pour prioriser la sécurité, attribuez l'accès et testez le fournisseur dès qu'il est actif.",actions:{cancel_button_text:"Annuler",process_button_text:"Procéder"}}},create_sso_provider:{steps:{one:"Fournisseur d'identité",two:"Détails du fournisseur",three:"Configurer le fournisseur"},header:{title:"Ajouter un fournisseur",back_button_text:"Retour à la connexion unique"},nextButtonLabel:"Suivant",previousButtonLabel:"Retour",completeButtonLabel:"Créer le fournisseur",notifications:{general_error:"Un problème est survenu lors du traitement de votre demande. Veuillez réessayer ou contacter le support si le problème persiste.",provider_create_success:"${providerName} a été créé.",provider_create_duplicated_provider_error:"Le fournisseur ${providerName} existe déjà. Veuillez choisir un autre nom.",provider_create_discovery_failure:"${domain} introuvable. Vérifiez le domaine et réessayez."},provider_select:{title:"Sélectionnez votre fournisseur d'identité",description:"Choisissez le fournisseur d'identité que vous souhaitez intégrer à Auth0 pour accéder aux instructions de configuration étape par étape."},provider_details:{title:"Détails du fournisseur",description:"Fournissez un nom reconnaissable et un identifiant permanent pour vous aider à gérer et référencer ce fournisseur plus tard.",fields:{name:{label:"Nom",placeholder:"Entrez un identifiant",helper_text:"Un identifiant lisible par l'humain pour le fournisseur. Cela ne peut pas être modifié.",error:"Veuillez entrer un nom d'organisation valide"},display_name:{label:"Nom affiché",placeholder:"Entrez le nom affiché",helper_text:"Le nom affiché aux utilisateurs finaux de ce fournisseur.",error:"Veuillez entrer un nom affiché valide"}}},provider_configure:{title:"Configurer le fournisseur",description:"Établissez une connexion entre votre fournisseur d'identité et Auth0.",fields:{common:{show_as_button:{label:"Afficher comme bouton",helper_text:"Affichez cette connexion comme un bouton sur la page de connexion"},assign_membership_on_login:{label:"Attribuer l'appartenance lors de la connexion",helper_text:"Accordez automatiquement l'appartenance à l'organisation aux utilisateurs qui se connectent via cette connexion"}},okta:{domain:{label:"Domaine Okta",placeholder:"nom-de-domaine.okta.com",helper_text:"Où trouver le domaine Okta ?",error:"Veuillez entrer un domaine Okta valide"},client_id:{label:"ID client",placeholder:"Entrez votre ID client",helper_text:"Identifiant unique pour l'intégration de l'application ou du service client. Où trouver l'ID client ?",error:"Veuillez entrer un ID client valide"},client_secret:{label:"Secret client",placeholder:"Entrez votre secret client",helper_text:"Jeton confidentiel utilisé pour l'authentification du client. Où trouver le secret client ?",error:"Veuillez entrer un secret client valide"},callback_url:{label:"URL de rappel",placeholder:"https://staff0.local.dev.auth0.com/login/callback",helper_text:"Vous devrez peut-être configurer le tenant Okta avec cette URL de rappel.",error:"Veuillez entrer une URL valide"}},"google-apps":{domain:{label:"Domaine Google Workspace",placeholder:"votre-domaine-google-workspace.com",error:"Veuillez entrer un domaine Google Workspace valide"},client_id:{label:"ID client",placeholder:"Entrez votre ID client",helper_text:"Identifiant unique pour l'intégration de l'application ou du service client.",error:"Veuillez entrer un ID client valide"},client_secret:{label:"Secret client",placeholder:"Entrez votre secret client",helper_text:"Jeton confidentiel utilisé pour l'authentification du client.",error:"Veuillez entrer un secret client valide"},callback_url:{label:"URL de rappel",placeholder:"https://staff0.local.dev.auth0.com/login/callback",helper_text:"Vous devrez peut-être configurer le tenant Google Workspace avec cette URL de rappel.",error:"Veuillez entrer une URL valide"}},waad:{tenant_domain:{label:"Domaine Microsoft Entra ID",placeholder:"votre-domaine-entra-id.com",error:"Veuillez entrer un domaine Microsoft Entra ID valide"},client_id:{label:"ID client",placeholder:"Entrez votre ID client",helper_text:"Identifiant unique pour l'intégration de l'application ou du service client.",error:"Veuillez entrer un ID client valide"},client_secret:{label:"Secret client",placeholder:"Entrez votre secret client",helper_text:"Jeton confidentiel utilisé pour l'authentification du client.",error:"Veuillez entrer un secret client valide"},callback_url:{label:"URL de rappel",placeholder:"https://staff0.local.dev.auth0.com/login/callback",helper_text:"Vous devrez peut-être configurer le tenant Entra ID avec cette URL de rappel.",error:"Veuillez entrer une URL valide"}},oidc:{discovery_url:{label:"Point de terminaison de configuration OpenID Provider",placeholder:"https://example.com/.well-known/openid-configuration",helper_text:"Entrez l'URL du document de découverte du fournisseur OpenID Connect avec lequel vous souhaitez vous connecter.",error:"Veuillez entrer une URL de découverte valide"},type:{label:"Canal de communication",helper_text:"Sélectionnez si les échanges d'authentification se font via une communication serveur à serveur (Back Channel) ou via le navigateur en utilisant le flux implicite avec Form Post (Front Channel).",options:{back_channel:{label:"Back Channel"},front_channel:{label:"Front Channel"}}},client_id:{label:"ID client",placeholder:"Entrez votre ID client",helper_text:"Identifiant unique pour l'intégration de l'application ou du service client.",error:"Veuillez entrer un ID client valide"},client_secret:{label:"Secret client",placeholder:"Entrez votre secret client",helper_text:"Jeton confidentiel utilisé pour l'authentification du client.",error:"Veuillez entrer un secret client valide"}},samlp:{meta_data_source:{label:"Source des métadonnées",options:{meta_data_url:{label:"URL des métadonnées"},meta_data_file:{label:"Fichier de métadonnées"}}},meta_data_url:{label:"URL des métadonnées",placeholder:"https://example.com/samlp/metadata.xml",helper_text:"Emplacement pour récupérer les informations de connexion SAML SSO pour l'intégration.",error:"Veuillez entrer une URL de métadonnées valide"},single_sign_on_login_url:{label:"URL de connexion SSO",placeholder:"https://example.com/idp/saml/",helper_text:"Point de terminaison pour initier une authentification sécurisée dans les connexions SAML SSO.",error:"Veuillez entrer une URL de connexion SSO valide"},cert:{label:"Certificat de signature",placeholder:"Télécharger le certificat de signature",helper_text:"Clé publique SAML X.509 encodée en format PEM ou CER.",error:"Veuillez télécharger un certificat de signature valide"},advanced_settings:{title:"Paramètres avancés",sign_request:{label:"Signer la demande",helper_text_metadata_file:"Lorsque activé, la demande d'authentification SAML sera signée. Téléchargez le certificat et fournissez-le au SAMLP qui recevra l'assertion signée pour valider la signature. Cela doit être activé d'abord dans le SAMLP. Une fois activé, partagez l'URL des métadonnées pour l'intégration.",helper_text_metadata_url:"Lorsque activé, la demande d'authentification SAML sera signée. Téléchargez le certificat et fournissez-le au SAMLP qui recevra l'assertion signée pour valider la signature."},request_protocol_binding:{label:"Protocole de liaison de la demande",placeholder:"HTTP-Post",helper_text:"Le protocole SAML à utiliser pour les demandes d'authentification.",error:"Veuillez sélectionner un protocole de liaison"},sign_request_algorithm:{label:"Algorithme de signature de la demande",placeholder:"RSA-SHA256",helper_text:"L'algorithme utilisé pour signer les demandes d'authentification SAML.",error:"Veuillez sélectionner un algorithme de signature"},sign_request_algorithm_digest:{label:"Algorithme de digest de la demande",placeholder:"SHA256",helper_text:"L'algorithme de digest utilisé pour la signature des demandes SAML.",error:"Veuillez sélectionner un algorithme de digest"}},icon_url:{label:"URL de l'icône",placeholder:"Entrez l'URL de l'icône",helper_text:"URL pour l'icône du fournisseur affichée aux utilisateurs.",error:"Veuillez entrer une URL valide"}},adfs:{meta_data_source:{label:"Source des métadonnées ADFS",options:{meta_data_url:{label:"URL ADFS"},meta_data_file:{label:"Fichier de métadonnées"}}},meta_data_url:{label:"URL des métadonnées",placeholder:"https://example.com/FederationMetadata/2007-06/FederationMetadata.xml",helper_text:"Emplacement pour récupérer les informations de connexion WS-Fed SSO pour l'intégration.",error:"Veuillez entrer une URL de métadonnées valide"},meta_data_location_url:{label:"URL de localisation des métadonnées",placeholder:"https://HOSTNAME/FederationMetadata/2007-06/FederationMetadata.xml",helper_text:"Emplacement pour récupérer les informations de connexion WS-Fed SSO pour l'intégration.",error:"Veuillez entrer une URL de localisation des métadonnées valide"},federation_metadata_file:{label:"Fichier de métadonnées de fédération",placeholder:"Télécharger le fichier de métadonnées de fédération",helper_text:"Identifiant numérique utilisé pour l'authentification sécurisée de l'identité.",error:"Veuillez télécharger un fichier de métadonnées de fédération valide"},upload_button_label:"Télécharger"},"ping-federate":{ping_federate_baseurl:{label:"URL de connexion SSO",placeholder:"https://example.com/idp/SSO.saml2",helper_text:"Point de terminaison pour initier une authentification sécurisée dans les connexions PingFederate SSO.",error:"Veuillez entrer une URL de connexion SSO valide"},sign_cert:{label:"Certificat de signature",placeholder:"Télécharger le certificat de signature",helper_text:"Identifiant numérique utilisé pour l'authentification sécurisée de l'identité.",error:"Veuillez télécharger un certificat de signature valide"},advanced_settings:{title:"Paramètres avancés",sign_request:{label:"Signer la demande",helper_text:"Lorsque activé, la demande d'authentification SAML sera signée. Téléchargez le certificat et fournissez-le au SAMLP qui recevra l'assertion signée pour valider la signature. Cela doit être activé d'abord dans le SAMLP. Une fois activé, partagez l'URL des métadonnées pour l'intégration.",error:"Veuillez sélectionner une option"},sign_request_algorithm:{label:"Algorithme de signature de la demande",placeholder:"RSA-SHA256",helper_text:"L'algorithme utilisé pour signer les demandes d'authentification SAML à PingFederate.",error:"Veuillez sélectionner un algorithme de signature"},sign_request_algorithm_digest:{label:"Algorithme de digest de la demande",placeholder:"SHA256",helper_text:"L'algorithme de digest utilisé pour la signature des demandes PingFederate.",error:"Veuillez sélectionner un algorithme de digest"}}}}}},edit_sso_provider:{header:{back_button_text:"Retour à la connexion unique",enable_provider_tooltip_text:"Basculer pour activer le fournisseur.",disable_provider_tooltip_text:"Basculer pour désactiver le fournisseur."},mappings:{title:"Mappage",description:"Assurez-vous que les bons attributs utilisateur sont transmis du fournisseur d'identité au fournisseur de service.",description_provider_tab:"Établissez une connexion entre votre fournisseur d'identité et Auth0.",external_namespace:{label:"Espace de noms externe"},required:{title:"Attributs obligatoires",description:"Assurez-vous qu'un attribut ${strategy} valide est mappé aux attributs suivants.",table:{columns:{attribute_name_label:"Nom de l'attribut",external_field_label:"Champ externe"},tags:{updated:{label:"Mis à jour",tooltip:"Cet attribut a été mis à jour. Mettez à jour la configuration de votre fournisseur d'identité."},removed:{label:"Supprimé",tooltip:"Cet attribut a été supprimé. Retirez-le de la configuration de votre fournisseur d'identité."},new:{label:"Nouveau",tooltip:"Cet attribut a été ajouté. Ajoutez-le à la configuration de votre fournisseur d'identité."}}}},optional:{title:"Attributs optionnels",description:"Le mappage de ces attributs améliorera le profil utilisateur mais n'est pas obligatoire.",table:{columns:{attribute_name_label:"Nom de l'attribut",external_field_label:"Champ externe"},tags:{updated:{label:"Mis à jour",tooltip:"Cet attribut a été mis à jour. Mettez à jour la configuration de votre fournisseur d'identité."},removed:{label:"Supprimé",tooltip:"Cet attribut a été supprimé. Retirez-le de la configuration de votre fournisseur d'identité."},new:{label:"Nouveau",tooltip:"Cet attribut a été ajouté. Ajoutez-le à la configuration de votre fournisseur d'identité."}}}}},tabs:{sso:{name:"Connexion unique",content:{title:"Connexion unique",description:"Gérez et configurez la connexion unique.",attribute_sync_alert:{title:"Les mappages pour la connexion unique ont été mis à jour.",description:"Veuillez vérifier les attributs et mettre à jour la configuration de votre fournisseur d'identité pour éviter les problèmes de connexion. Une fois terminé, synchronisez les mappages mis à jour.",sync_button_label:"Synchroniser",sync_modal:{title:"Synchroniser les mappages mis à jour",description:"La synchronisation mettra à jour la configuration de votre fournisseur avec les derniers mappages. Cette action ne peut pas être annulée.",actions:{cancel_button_label:"Annuler",proceed_button_label:"Procéder"}}}}},provisioning:{name:"Provisionnement",content:{header:{title:"Provisionnement",description:"Configurez le provisionnement pour permettre la synchronisation du profil utilisateur avec votre organisation.",guided_setup_button_label:"Configuration guidée",provider_disabled_tooltip:"Activez le fournisseur pour créer le provisionnement",enable_provisioning_tooltip:"Basculer pour activer le provisionnement",disable_provisioning_tooltip:"Basculer pour désactiver le provisionnement"},attribute_sync_alert:{title:"Les mappages pour le provisionnement ont été mis à jour.",description:"Veuillez vérifier les attributs et mettre à jour la configuration de votre fournisseur d'identité pour éviter les problèmes de connexion. Une fois terminé, synchronisez les mappages mis à jour. Vous devrez générer de nouveaux jetons et les ajouter à votre fournisseur d'identité.",sync_button_label:"Synchroniser",sync_modal:{title:"Synchroniser les mappages mis à jour",description:"La synchronisation mettra à jour votre configuration de provisionnement avec les derniers mappages et supprimera vos jetons existants. Vous devrez générer de nouveaux jetons et les ajouter à votre fournisseur d'identité. Cette action ne peut pas être annulée.",actions:{cancel_button_label:"Annuler",proceed_button_label:"Procéder"}}},delete:{modal:{title:"Désactiver le provisionnement",content:{description:"Êtes-vous sûr de vouloir désactiver le provisionnement ? Cela supprimera définitivement la configuration de provisionnement et révoquera l'accès pour tous les clients utilisant le provisionnement avec ce fournisseur."},actions:{cancel_button_label:"Annuler",delete_button_label:"Procéder"}}},details:{manage_tokens:{title:"Jetons Bearer",description:"Générez un jeton bearer à fournir à votre fournisseur d'identité. Vous pouvez créer jusqu'à deux jetons.",generate_button_label:"Générer un jeton",max_tokens_tooltip:"Maximum de 2 jetons autorisés",empty_state:{title:"Aucun jeton créé pour l'instant",description:"Générez un jeton bearer pour authentifier les requêtes SCIM de votre fournisseur d'identité."},table:{token_id_label:"ID du jeton",created_label:"Créé",expires_label:"Expire",actions_label:"Actions"},token_item:{token_prefix:"Jeton",never_expire:"Ce jeton n'expirera jamais.",last_used:"Dernière utilisation : Jamais",status_active:"Actif",status_expired:"Expiré",delete_button_label:"Supprimer"},create_modal:{title:"Informations sur le jeton Bearer",copy_and_close_button_label:"Copier et fermer",content:{description:"Copiez le jeton bearer à fournir à votre fournisseur d'identité. Il ne sera plus affiché après la fermeture de cette boîte de dialogue.",field:{label:"Jeton"}}},delete_modal:{title:"Supprimer le jeton ${tokenId}",cancel_button_label:"Annuler",delete_button_label:"Supprimer le jeton",content:{confirmation:"Êtes-vous sûr de vouloir supprimer le jeton ${tokenId} ? Cette action ne peut pas être annulée.",description:"Pour éviter une interruption de service, envisagez de créer un second jeton et de le fournir à votre client de provisionnement avant de supprimer celui-ci."}}},fields:{user_id_attribute:{label:"Attribut ID utilisateur",helper_text:"L'attribut qui identifie de façon unique un utilisateur."},scim_endpoint_url:{label:"URL du point de terminaison SCIM"}}}}},domains:{name:"Domaines",content:{title:"Domaines",description:"Renforcez la sécurité et simplifiez la connexion en dirigeant les utilisateurs vers votre fournisseur d'identité selon leur domaine de courriel.",create_button_text:"Ajouter un domaine",table:{empty_message:"Vous n'avez aucun domaine",columns:{name:"Nom de domaine",status:"Statut",verify:"Vérifier"},actions:{enable_domain_tooltip:"Basculer pour activer ce domaine",disable_domain_tooltip:"Basculer pour désactiver ce domaine"},domain_statuses:{pending:"En attente",verified:"Vérifié",failed:"Échoué"}},domain_create:{modal:{title:"Ajouter un domaine",field:{label:"URL du domaine",placeholder:"nom-de-domaine.com",error:"Veuillez entrer un domaine valide"},actions:{cancel_button_text:"Annuler",create_button_text:"Ajouter un domaine"}}},domain_delete:{modal:{title:"Supprimer le domaine",description:{pending:"${domainName} est en attente de vérification et peut prendre jusqu'à 48 heures pour être traité. Êtes-vous sûr de vouloir supprimer ce domaine ?",verified:"La suppression de ${domainName} peut perturber les flux de connexion des utilisateurs. Êtes-vous sûr de vouloir supprimer ce domaine ? Cette action ne peut pas être annulée."},actions:{cancel_button_text:"Annuler",delete_button_text:"Supprimer"}}},domain_verify:{modal:{title:"Ajouter des enregistrements DNS pour ${domainName}",txt_record_name:{label:"Nom de l'enregistrement TXT"},txt_record_content:{label:"Contenu de l'enregistrement TXT"},verification_status:{label:"Statut de vérification :",pending:"En attente",description:"Votre domaine est en attente de vérification. Cliquez sur 'Vérifier' pour actualiser le statut, ou revenez plus tard. Les modifications DNS peuvent prendre jusqu'à 48 heures, mais sont généralement traitées plus rapidement."},actions:{verify_button_text:"Vérifier",delete_button_text:"Supprimer",done_button_text:"Terminé"},errors:{verification_failed:"${domainName} n'a pas pu être vérifié. Veuillez patienter et réessayer ou vérifier auprès de votre fournisseur DNS."}}}}}},provider_details:{save_button_label:"Enregistrer"}},sso_provider_details:{unsaved_changes_text:"Modifications non enregistrées",submit_button_label:"Enregistrer"},delete_sso_provider:{title:"Supprimer ce fournisseur",description:"Une fois confirmé, cette opération ne peut pas être annulée.",delete_button_label:"Supprimer",modal:{title:"Supprimer ${providerName}",description:"Les utilisateurs qui se connectent via ce fournisseur perdront l'accès. L'action ne peut pas être annulée. Êtes-vous sûr de vouloir supprimer ce fournisseur ?",content:{description:"Tapez le nom du fournisseur pour confirmer.",field:{label:"Nom du fournisseur",placeholder:"Tapez le nom du fournisseur"}},actions:{cancel_button_label:"Annuler",delete_button_label:"Supprimer"}}},remove_sso_provider:{title:"Retirer ce fournisseur de l'organisation",description:"Une fois confirmé, cette opération ne peut pas être annulée.",remove_button_label:"Supprimer",modal:{title:"Retirer ${providerName} de ${organizationName}",description:"Cela révoquera l'accès à ${providerName} pour tous les utilisateurs de cette organisation. Les utilisateurs ne seront pas supprimés mais ne pourront plus se connecter avec ce fournisseur.",content:{description:"Tapez le nom du fournisseur pour confirmer.",field:{label:"Nom du fournisseur",placeholder:"Tapez le nom du fournisseur"}},actions:{cancel_button_text:"Annuler",remove_button_text:"Procéder"}}},notifications:{delete_success:"${providerName} a été supprimé.",remove_success:"${providerName} a été retiré de ${organizationName}",update_success:"Les modifications apportées à ${providerName} ont été enregistrées.",general_error:"Un problème est survenu lors du traitement de votre demande. Veuillez réessayer ou contacter le soutien si le problème persiste.",domain_create:{success:"${domainName} a été créé.",error:"Un problème est survenu lors de la création du domaine.",on_before:"Le domaine n'est pas valide."},domain_verify:{success:"${domainName} a été vérifié.",error:"Un problème est survenu lors de la vérification du domaine.",on_before:"La validation de la vérification du domaine n'est pas correcte.",verification_failed:"${domainName} n'a pas pu être vérifié. Veuillez patienter et réessayer ou vérifier auprès de votre fournisseur DNS."},domain_delete:{success:"${domainName} a été supprimé.",error:"Un problème est survenu lors de la suppression du domaine."},domain_associate_provider:{success:"${domain} activé pour ${idp}"},domain_delete_provider:{success:"${domain} désactivé pour ${idp}"},provisioning_disabled_success:"Le provisionnement a été désactivé.",scim_token_delete_sucess:"Le jeton a été supprimé.",scim_token_create_success:"Jeton généré avec succès",sso_attributes_sync_success:"Les mappages du fournisseur ont été mis à jour.",provisioning_attributes_sync_success:"Les mappages de provisionnement ont été mis à jour."}},F5={title:"Méthodes d'authentification à facteurs multiples",description:"Protection supplémentaire pour votre compte et votre identité",no_active_mfa:"Aucun facteur MFA actif inscrit.",component_error_title:"Erreur lors du chargement du composant MFA",component_error_description:`Nous rencontrons des difficultés pour charger vos méthodes d'authentification à facteurs multiples. +Veuillez actualiser la page et réessayer`,loading:"Chargement...",delete:"Supprimer",enroll:"Inscrire",submit:"Soumettre",update:"Mettre à jour",remove:"Retirer",enrolling:"Inscription...",enrolled:"Inscrit",enabled:"ACTIVÉ",enrollment:"Inscription",confirmation:"Confirmation",remove_factor:"Inscription supprimée avec succès.",enroll_factor:"Inscrit avec succès.",enroll_totp_mfa:"Inscrire OTP MFA",delete_factor:"Supprimer l'authentificateur ${factorName}",delete_mfa_title:"Retirer l'authentificateur existant",delete_mfa_phone_consent:"Êtes-vous sûr de vouloir retirer ce numéro de téléphone pour SMS ?",delete_mfa_email_consent:"Êtes-vous sûr de vouloir retirer cet e-mail ?",delete_mfa_totp_consent:"Êtes-vous sûr de vouloir retirer cet authentificateur ?","delete_mfa_push-notification_consent":"Êtes-vous sûr de vouloir retirer cette notification push ?","delete_mfa_recovery-code_consent":"Êtes-vous sûr de vouloir retirer ce code de récupération ?",cancel:"Annuler",close:"Fermer",next:"Suivant",back:"Retour","yes-remove":"Oui, retirer",ok:"Ok","app-store":"App Store","google-play":"Google Play",confirm:"Confirmer",continue:"Continuer",deleting:"Suppression...",errors:{factors_loading_error:"Erreur lors du chargement des facteurs MFA !",unknown_error:"Erreur inconnue survenue",delete_factor:"Échec de la suppression de l'authentificateur",failed:"échec : ${message}",phone_number_required:"Le numéro de téléphone est requis pour l'inscription SMS.",email_required:"L'e-mail est requis pour l'inscription par e-mail.",invalid_email:"Adresse e-mail invalide",invalid_phone_number:"Numéro de téléphone invalide",unsupported_mfa_type:"Type MFA non pris en charge : ${factorName}","push-notification":{too_many_entities:"Vous avez atteint la limite d'entités du type notification push pour cet utilisateur.",unsupported_challenge_type:`Auth0 Verifier est désactivé pour votre tenant. Vous pouvez l'activer depuis le tableau de bord en activant "Notifications push" dans la section Guardian MFA.`,invalid_request:"Paramètre requis manquant",authorization_pending:"Autorisation en attente : veuillez répéter la demande dans quelques secondes."},totp:{invalid_request:"Paramètre requis manquant",too_many_entities:"Vous avez atteint la limite d'entités du type totp pour cet utilisateur.",unsupported_challenge_type:`OTP Verifier est désactivé pour votre tenant. Vous pouvez l'activer depuis le tableau de bord en activant "Notifications push" dans la section Guardian MFA (les notifications push incluent OTP).`,invalid_grant:"Code OTP invalide"},phone:{unsupported_challenge_type:`SMS Verifier est désactivé pour votre tenant. Vous pouvez l'activer depuis le tableau de bord en activant "SMS" dans la section Guardian MFA.`,bad_gateway:"Le numéro de téléphone est invalide.",too_many_entities:"Vous avez atteint la limite d'entités du type sms pour cet utilisateur."},email:{expired_token:"Le code de vérification est expiré",invalid_grant:"Code invalide",access_denied:"Impossible de trouver l'authentificateur demandé",too_many_entities:"Vous avez atteint la limite d'entités du type e-mail pour cet utilisateur."}},phone:{title:"Message téléphonique",description:"Aucun numéro de téléphone n'a été ajouté.","button-text":"Ajouter un téléphone pour SMS"},"push-notification":{title:"Notification push via Auth0 Guardian",description:"Aucune authentification push n'a été ajoutée.","button-text":"Ajouter une authentification push"},totp:{title:"Mot de passe à usage unique",description:"Aucun authentificateur n'a été ajouté.","button-text":"Ajouter une application d'authentification"},email:{title:"E-mail",description:"Aucun e-mail n'a été ajouté.","button-text":"Ajouter un e-mail"},duo:{title:"Duo Security",description:"Utilisez votre compte DUO pour l'authentification à facteurs multiples."},"webauthn-roaming":{title:"WebAuthn avec clés de sécurité FIDO",description:"Utilisez des clés de sécurité compatibles WebAuthn (par exemple, FIDO2) comme second facteur.","button-text":"Ajouter WebAuthn avec clés de sécurité FIDO"},"webauthn-platform":{title:"WebAuthn avec biométrie de l'appareil FIDO",description:"Utilisez la biométrie de l'appareil compatible WebAuthn comme second facteur.","button-text":"Ajouter WebAuthn avec biométrie de l'appareil FIDO"},"recovery-code":{title:"Code de récupération",description:"Utilisez un code de récupération unique pour retrouver l'accès à votre compte.","button-text":"Ajouter un code de récupération"},enrollment_form:{email_address:"Adresse e-mail",phone_number:"Numéro de téléphone",send_code:"Envoyer le code",sending:"Envoi...",enroll_title:"Vérifiez que c'est vous",enroll_email_placeholder:"Entrez l'adresse e-mail",enroll_email_description:"Entrez votre e-mail pour recevoir un code de vérification",enroll_sms_placeholder:"Entrez le numéro de téléphone",enroll_sms_description:"Entrez votre numéro de téléphone pour recevoir un code de vérification",show_auth0_guardian_title:"Scannez ce code QR avec votre application Auth0 Guardian pour enregistrer cette méthode d'authentification ou copiez l'URL.",recovery_code_description:"Copiez ce code de récupération et gardez-le en sécurité. Vous en aurez besoin si vous devez vous connecter sans votre appareil.",show_otp:{title:"Scannez ce code QR avec votre application d'authentification pour enregistrer cette méthode d'authentification ou copiez le code.",save_recovery:"Sauvegardez ces codes de récupération !",enter_code:"Entrez le code de votre application d'authentification",one_time_passcode:"Code à usage unique",verify_code:"Vérifier le code",copy_as_code:"Copier comme code",verifying:"Vérification...",enter_verify_code:"Entrez le code à 6 chiffres que nous avons envoyé à ${verifier}",enter_opt_code:"Entrez le code de votre authentificateur",install_guardian_description:"Pour continuer, installez l'application Auth0 Guardian via l'app store depuis votre appareil mobile"}}},xV={common:C5,gate_keeper:w5,domain_management:E5,organization_management:S5,idp_management:D5,mfa:F5};const _V=Object.freeze(Object.defineProperty({__proto__:null,common:C5,default:xV,domain_management:E5,gate_keeper:w5,idp_management:D5,mfa:F5,organization_management:S5},Symbol.toStringTag,{value:"Module"}));var R5={copy:"コピー",copied:"コピーしました",error:{generic:"リクエストの処理中に問題が発生しました。もう一度お試しいただくか、問題が解決しない場合はサポートにお問い合わせください。",bad_request:"リクエストが無効です。入力内容を確認してもう一度お試しください。",missing_token:"セッションが期限切れです。再度ログインしてください。",insufficient_scope:"この操作を実行するために必要なスコープ権限がありません。",forbidden:"この操作を実行する権限がありません。",not_found:"リクエストされたリソースが見つかりませんでした。",rate_limit:"リクエストが多すぎます。しばらくお待ちいただいてから再度お試しください。"}},B5={fallback:{title:"情報を読み込めませんでした",description:"もう一度お試しいただくか、問題が解決しない場合はサポートにお問い合わせください。",retry:"再試行"},mfa_error:{title:"追加認証が必要です",description:"追加認証を完了できませんでした。サポートにお問い合わせください。"},mfa:{title:"アカウントを確認してください",subtitle:"この操作を実行するには、以下のオプションのいずれかから第二認証要素を入力してください。",authenticator_type:{otp:"認証アプリ","recovery-code":"リカバリーコード",email:"メールOTP",sms:"SMS",push:"Guardian アプリによるプッシュ通知",voice:"音声通話"},no_authenticators:"利用可能な認証方法がありません。",verify_button:"確認",enroll_button:"設定",cancel:"キャンセル",back:"戻る",continue:"続ける",challenge:{otp_description:"認証アプリに表示されているワンタイムコードを入力してください。",phone_title:"電話番号を確認してください",code_sent_description:"${name} に送信したワンタイムコードを入力してください。",email_title:"メールアドレスを確認してください",push_title:"プッシュ通知を送信しました",push_description:"Guardianアプリで本人確認してください",push_waiting:"確認を待っています...",recovery_code_description:"保存済みのリカバリーコードを入力してください。",resend_prompt:"コードが届きませんでしたか?",resend:"再送信",verifying:"確認中..."},enroll:{install_title:"認証アプリの設定",install_description:"続行するには、モバイルデバイスのアプリストアからAuth0 Guardianアプリをインストールしてください。",app_store:"App Store",google_play:"Google Play",phone_label:"電話番号(あなたの)",phone_description:"この番号に確認コードをお送りします。",phone_title:"SMSワンタイムパスワードを受け取る電話番号を入力してください。",email_label:"メールアドレス(あなたの)",email_description:"このメールアドレスに確認コードをお送りします。",email_title:"メールワンタイムパスワード用のメールアドレスを入力してください",enrolling:"設定中...",scan_description:"このQRコードを認証アプリでスキャンしてください。",scan_helper:"認証アプリでこのコードをスキャンしてセットアップを完了してください。スキャンできない場合は、以下のコードを手動で入力してください。",push_scan_description:"このQRコードをGuardianアプリでスキャンしてください。",qr_alt:"登録QRコード",recovery_title:"リカバリーコードを生成する",recovery_description:"これらのリカバリーコードをコピーして、安全な場所に保管してください。認証方法にアクセスできなくなった場合に必要になります。",recovery_confirmed:"これらのコードを安全に記録しました",invalid_email:"有効なメールアドレスを入力してください。",invalid_phone_number:"有効な電話番号を入力してください。"}}},k5={domain_table:{header:{title:"ドメイン",description:"ドメインを追加してセキュリティを強化し、ユーザーのメールドメインに基づいてアイデンティティプロバイダーへ直接誘導することでログインを効率化します。",create_button_text:"ドメインを追加"},table:{empty_message:"ドメインがありません。",columns:{domain:"ドメイン名",status:"ステータス"},actions:{configure_button_text:"設定",view_button_text:"表示",verify_button_text:"検証",delete_button_text:"削除"}},notifications:{general_error:"リクエストの処理中に問題が発生しました。再度お試しいただくか、問題が解決しない場合はサポートまでお問い合わせください。",fetch_providers_error:"プロバイダーの取得中に問題が発生しました。再度お試しいただくか、問題が解決しない場合はサポートまでお問い合わせください。",fetch_domains_error:"ドメインの取得中に問題が発生しました。再度お試しいただくか、問題が解決しない場合はサポートまでお問い合わせください。",domain_create:{success:"${domainName}が作成されました。",error:"ドメインの作成中に問題が発生しました。",on_before:"ドメインが有効ではありません。"},domain_verify:{success:"${domainName}が検証されました。",error:"ドメインの検証中に問題が発生しました。",on_before:"ドメイン検証のバリデーションが正しくありません。",verification_failed:"${domainName}を検証できませんでした。しばらく待ってから再度お試しいただくか、DNSプロバイダーをご確認ください。"},domain_delete:{success:"${domainName}が削除されました。",error:"ドメインの削除中に問題が発生しました。"},domain_associate_provider:{success:"${domainName}が${idp}プロバイダーで有効になりました。",error:"ドメインをプロバイダーに関連付ける際に問題が発生しました。",on_before:"ドメインのプロバイダー関連付けバリデーションが正しくありません。"},domain_delete_provider:{success:"${domainName}が${idp}プロバイダーで無効になりました。",error:"ドメインをプロバイダーから削除する際に問題が発生しました。",on_before:"ドメインのプロバイダー削除バリデーションが正しくありません。"}}},domain_create:{modal:{title:"ドメインの追加",field:{label:"ドメインURL",placeholder:"ドメイン名を入力してください",error:"有効なドメインを入力してください"},actions:{cancel_button_text:"キャンセル",create_button_text:"ドメインを追加"}}},domain_configure_providers:{modal:{title:"${domain}を設定",description:"${domain}メールドメインを持つユーザーを、選択したプロバイダーの認証のためにアイデンティティプロバイダーに直接誘導します。",table:{empty_message:"プロバイダーがありません。",columns:{name:"名前",provider:"アイデンティティプロバイダー"},actions:{add_provider_button_text:"プロバイダーを追加",view_provider_button_text:"表示",enable_provider_tooltip:"トグルでこのプロバイダーのドメインを有効にします",disable_provider_tooltip:"トグルでこのプロバイダーのドメインを無効にします"}},actions:{close_button_text:"閉じる"}}},domain_delete:{modal:{title:"ドメインの削除",description:{pending:"${domainName}は検証待ちで、処理に最大48時間かかる場合があります。このドメインを削除してもよろしいですか?",verified:"${domainName} を削除すると、ユーザーのログインフローに影響を与える可能性があります。このドメインを削除してもよろしいですか?この操作は元に戻せません。"},actions:{cancel_button_text:"キャンセル",delete_button_text:"削除"}}},domain_verify:{modal:{title:"${domainName}のDNSレコードを追加",txt_record_name:{label:"TXTレコード名"},txt_record_content:{label:"TXTレコードの内容"},verification_status:{label:"検証ステータス:",pending:"保留中",description:"ドメインの検証が保留中です。「検証」をクリックしてステータスを更新するか、後でもう一度確認してください。DNS変更には最大48時間かかる場合がありますが、通常はより早く処理されます。"},actions:{verify_button_text:"検証",delete_button_text:"削除",done_button_text:"完了"},errors:{verification_failed:"${domainName}を検証できませんでした。しばらく待ってから再度お試しいただくか、DNSプロバイダーをご確認ください。"}}},shared:{domain_statuses:{pending:"保留中",verified:"検証済み",failed:"失敗"}}},M5={organization_details:{sections:{settings:{title:"設定",fields:{name:{label:"名前",placeholder:"組織名を入力してください",helper_text:"組織の人間が読みやすい識別子で、エンドユーザーがアプリケーション内で自分の組織に移動するために使用されます。",error:"小文字の英字、数字、ハイフン、アンダースコアのみ使用できます(例:my-org-01)"},display_name:{label:"表示名",placeholder:"表示名を入力してください",helper_text:"この組織のエンドユーザーに表示される名前です。",error:"有効な表示名を入力してください"}}},branding:{title:"ブランディング",fields:{logo:{label:"組織ロゴ",helper_text:"この組織のエンドユーザーとのやり取りの際に表示されるロゴです。",error:"ロゴの有効なHTTPS URLを入力してください"},primary_color:{label:"プライマリカラー",helper_text:"アプリケーションの認証フローでこの組織のエンドユーザーに表示されるボタンのプライマリカラーです。",error:"有効なカラー形式を入力してください"},page_background_color:{label:"ページ背景色",helper_text:"アプリケーションの認証フローでこの組織のエンドユーザーに表示されるページ背景色です。",error:"有効なカラー形式を入力してください"}}}},unsaved_changes_text:"未保存の変更",submit_button_label:"保存",cancel_button_label:"破棄"},organization_delete:{title:"${organizationName}を削除",description:"一度確認すると、この操作は元に戻すことができません。",delete_button_label:"削除",modal_title:"${organizationName}を削除",modal_description:"${organizationName}を削除してもよろしいですか?ユーザーは維持されますが、この組織へのメンバーシップは削除されます。一度確認すると、この操作は元に戻すことができません。",organization_name_field_placeholder:"組織名を入力してください",organization_name_field_label:"組織名",organization_name_field_error:"削除を確認するために「${organizationName}」と入力してください",cancel_button_label:"キャンセル"},organization_details_edit:{header:{back_button_text:"組織一覧に戻る",title:"${organizationName}"},save_organization_changes_message:"${organizationName}の変更が保存されました。",organization_changes_error_message:"リクエストの処理中に問題が発生しました。${message}.",organization_changes_error_message_generic:"リクエストの処理中に問題が発生しました。再度お試しいただくか、問題が解決しない場合はサポートまでお問い合わせください。"}},N5={sso_provider_table:{header:{title:"シングルサインオン",description:"組織のSSOアクセスを設定・管理します。",create_button_text:"プロバイダーを追加"},table:{empty_message:"プロバイダーがありません。",columns:{name:"名前",identity_provider:"アイデンティティプロバイダー",display_name:"表示名"},actions:{edit_button_text:"編集",delete_button_text:"削除",remove_button_text:"組織から削除",enabled_tooltip:"SSOプロバイダーを無効にするには、トグルを切り替えてください。",disabled_tooltip:"SSOプロバイダーを有効にするには、トグルを切り替えてください。"}},create_consent_modal:{title:"プロバイダーを作成する前に、以下をご確認ください:",description:"このプロバイダーを作成すると、${organizationName}へのSSOアクセスが有効になります。セキュリティを優先するため、プロバイダーがアクティブになったら、できるだけ早くアクセス権限を割り当てて、プロバイダーをテストしてください。",actions:{cancel_button_text:"キャンセル",process_button_text:"続行"}}},create_sso_provider:{steps:{one:"アイデンティティプロバイダー",two:"プロバイダー詳細",three:"プロバイダー設定"},header:{title:"プロバイダーを追加",back_button_text:"シングルサインオンに戻る"},nextButtonLabel:"次へ",previousButtonLabel:"戻る",completeButtonLabel:"プロバイダーを作成",notifications:{general_error:"リクエストの処理中に問題が発生しました。もう一度お試しいただくか、問題が解決しない場合はサポートにお問い合わせください。",provider_create_success:"${providerName} が作成されました。",provider_create_duplicated_provider_error:"${providerName} プロバイダーは既に存在します。別の名前を選択してください。",provider_create_discovery_failure:"${domain} が見つかりませんでした。ドメインを確認してもう一度お試しください。"},provider_select:{title:"IDプロバイダーを選択",description:"Auth0と統合する予定のIDプロバイダーを選択して、ステップバイステップの設定手順にアクセスしてください。"},provider_details:{title:"プロバイダー詳細",description:"このプロバイダーを後で管理・参照するために、認識しやすい名前と永続的な識別子を入力してください。",fields:{name:{label:"名前",placeholder:"識別子を入力",helper_text:"プロバイダーの人が読める識別子です。これは変更できません。",error:"有効な名前を入力してください"},display_name:{label:"表示名",placeholder:"表示名を入力",helper_text:"このプロバイダーのエンドユーザーに表示される名前です。",error:"有効な表示名を入力してください"}}},provider_configure:{title:"Configure Provider",description:"Establish a connection between your identity provider and Auth0.",fields:{common:{show_as_button:{label:"ボタンとして表示",helper_text:"この接続をログインページにボタンとして表示します"},assign_membership_on_login:{label:"ログイン時にメンバーシップを割り当て",helper_text:"この接続を通じてログインしたユーザーに組織メンバーシップを自動的に付与します"}},okta:{domain:{label:"Oktaドメイン",placeholder:"domain-name.okta.com",helper_text:"Oktaドメインはどこで確認できますか?",error:"有効なOktaドメインを入力してください"},client_id:{label:"クライアントID",placeholder:"クライアントIDを入力してください",helper_text:"クライアントアプリケーションまたはサービス統合の一意識別子。クライアントIDはどこで確認できますか?",error:"有効なクライアントIDを入力してください"},client_secret:{label:"クライアントシークレット",placeholder:"クライアントシークレットを入力してください",helper_text:"クライアント認証に使用される機密トークン。クライアントシークレットはどこで確認できますか?",error:"有効なクライアントシークレットを入力してください"},icon_url:{label:"アイコンURL",placeholder:"アイコンURLを入力してください",helper_text:"ユーザーに表示されるプロバイダーアイコンのURL。",error:"有効なURLを入力してください"}},"google-apps":{domain:{label:"Google ワークスペースドメイン",placeholder:"your-google-workspace-domain.com",error:"有効な Google ワークスペースドメインを入力してください"},client_id:{label:"クライアント ID",placeholder:"クライアント ID を入力してください",helper_text:"クライアントアプリケーションまたはサービス統合の一意識別子。",error:"有効なクライアント ID を入力してください"},client_secret:{label:"クライアントシークレット",placeholder:"クライアントシークレットを入力してください",helper_text:"クライアント認証に使用される機密トークン。",error:"有効なクライアントシークレットを入力してください"},callback_url:{label:"コールバック URL",placeholder:"https://staff0.local.dev.auth0.com/login/callback",helper_text:"このコールバック URL で Google ワークスペーステナントを設定する必要がある場合があります。",error:"有効な URL を入力してください"}},waad:{tenant_domain:{label:"Microsoft Entra ID ドメイン",placeholder:"your-entra-id-domain.com",error:"有効な Microsoft Entra ID ドメインを入力してください"},client_id:{label:"クライアント ID",placeholder:"クライアント ID を入力してください",helper_text:"クライアントアプリケーションまたはサービス統合の一意識別子。",error:"有効なクライアント ID を入力してください"},client_secret:{label:"クライアントシークレット",placeholder:"クライアントシークレットを入力してください",helper_text:"クライアント認証に使用される機密トークン。",error:"有効なクライアントシークレットを入力してください"},callback_url:{label:"コールバック URL",placeholder:"https://staff0.local.dev.auth0.com/login/callback",helper_text:"この コールバック URL で Entra ID テナントを設定する必要がある場合があります。",error:"有効な URL を入力してください"}},oidc:{discovery_url:{label:"OpenID プロバイダー構成エンドポイント",placeholder:"https://example.com/.well-known/openid-configuration",helper_text:"接続したい OpenID Connect プロバイダーのディスカバリードキュメントの URL を入力してください。",error:"有効なディスカバリー URL を入力してください"},type:{label:"通信チャネル",helper_text:"認証交換がサーバー間通信(バックチャネル)またはImplicit Flow with Form Post を使用してブラウザ経由(フロントチャネル)で行われるかを選択してください。",options:{back_channel:{label:"バックチャネル"},front_channel:{label:"フロントチャネル"}}},client_id:{label:"クライアント ID",placeholder:"クライアント ID を入力してください",helper_text:"クライアントアプリケーションまたはサービス統合の一意識別子。",error:"有効なクライアント ID を入力してください"},client_secret:{label:"クライアントシークレット",placeholder:"クライアントシークレットを入力してください",helper_text:"クライアント認証に使用される機密トークン。",error:"有効なクライアントシークレットを入力してください"}},"ping-federate":{meta_data_url:{label:"シングルサインオンログイン URL",placeholder:"https://example.com/idp/SSO.saml2",helper_text:"PingFederate SSO 接続でセキュアな認証を開始するためのエンドポイント。",error:"有効な SSO ログイン URL を入力してください"},sign_cert:{label:"署名証明書",placeholder:"署名証明書をアップロード",helper_text:"セキュアな身元認証に使用されるデジタル資格情報。",error:"有効な署名証明書をアップロードしてください"},advanced_settings:{title:"詳細設定",sign_request:{label:"リクエスト署名",helper_text:"有効にすると、SAML 認証リクエストが署名されます。証明書をダウンロードして、署名されたアサーションを受信する SAMLP に提供し、署名を検証してください。これは最初に SAMLP で有効にする必要があります。有効にしたら、統合用のメタデータ URL を共有してください。",error:"オプションを選択してください"},sign_request_algorithm:{label:"リクエスト署名アルゴリズム",placeholder:"RSA-SHA256",helper_text:"PingFederate への SAML 認証リクエストの署名に使用されるアルゴリズム。",error:"署名アルゴリズムを選択してください"},sign_request_algorithm_digest:{label:"リクエスト署名アルゴリズムダイジェスト",placeholder:"SHA256",helper_text:"PingFederate リクエスト署名に使用されるダイジェストアルゴリズム。",error:"ダイジェストアルゴリズムを選択してください"}}},adfs:{meta_data_source:{label:"ADFS メタデータソース",options:{meta_data_url:{label:"ADFS URL"},meta_data_file:{label:"メタデータファイル"}}},meta_data_url:{label:"メタデータ URL",placeholder:"https://example.com/FederationMetadata/2007-06/FederationMetadata.xml",helper_text:"統合用の WS-Fed SSO 接続情報を取得する場所。",error:"有効なメタデータ URL を入力してください"},meta_data_location_url:{label:"メタデータロケーション URL",placeholder:"https://HOSTNAME/FederationMetadata/2007-06/FederationMetadata.xml",helper_text:"統合用の WS-Fed SSO 接続情報を取得する場所。",error:"有効なメタデータロケーション URL を入力してください"},federation_metadata_file:{label:"フェデレーションメタデータファイル",placeholder:"フェデレーションメタデータファイルをアップロード",helper_text:"セキュアな身元認証に使用されるデジタル資格情報。",error:"有効なフェデレーションメタデータファイルをアップロードしてください"},upload_button_label:"アップロード"},samlp:{meta_data_source:{label:"メタデータソース",options:{meta_data_url:{label:"メタデータ URL"},meta_data_file:{label:"メタデータファイル"}}},meta_data_url:{label:"メタデータ URL",placeholder:"https://example.com/samlp/metadata.xml",helper_text:"統合用の SAML SSO 接続情報を取得する場所。",error:"有効なメタデータ URL を入力してください"},single_sign_on_login_url:{label:"シングルサインオンログイン URL",placeholder:"https://example.com/idp/saml/",helper_text:"SAML SSO 接続でセキュアな認証を開始するためのエンドポイント。",error:"有効な SSO ログイン URL を入力してください"},cert:{label:"署名証明書",placeholder:"署名証明書をアップロード",helper_text:"PEM または CER 形式でエンコードされた SAML X.509 公開鍵。",error:"有効な署名証明書をアップロードしてください"},advanced_settings:{title:"詳細設定",sign_request:{label:"リクエスト署名",helper_text_metadata_file:"有効にすると、SAML認証リクエストが署名されます。証明書をダウンロードし、署名付きアサーションを受信するSAMLPに提供して、署名の検証を行ってください。これはまずSAMLP側で有効にする必要があります。有効にした後、連携のためにメタデータURLを共有してください。",helper_text_metadata_url:"有効にすると、SAML認証リクエストが署名されます。証明書をダウンロードし、署名付きアサーションを受信するSAMLPに提供して、署名の検証を行ってください。"},request_protocol_binding:{label:"リクエストプロトコルバインディング",placeholder:"HTTP-Post",helper_text:"認証リクエストに使用する SAML プロトコルバインディング。",error:"プロトコルバインディングを選択してください"},sign_request_algorithm:{label:"リクエスト署名アルゴリズム",placeholder:"RSA-SHA256",helper_text:"SAML 認証リクエストの署名に使用されるアルゴリズム。",error:"署名アルゴリズムを選択してください"},sign_request_algorithm_digest:{label:"リクエスト署名アルゴリズムダイジェスト",placeholder:"SHA256",helper_text:"SAML リクエスト署名に使用されるダイジェストアルゴリズム。",error:"ダイジェストアルゴリズムを選択してください"}},icon_url:{label:"アイコン URL",placeholder:"アイコン URL を入力",helper_text:"ユーザーに表示されるプロバイダーアイコンの URL。",error:"有効な URL を入力してください"}}}}},edit_sso_provider:{header:{back_button_text:"シングルサインオンに戻る",enable_provider_tooltip_text:"トグルでプロバイダーを有効にします。",disable_provider_tooltip_text:"トグルでプロバイダーを無効にします。"},mappings:{title:"マッピング",description:"正しいユーザー属性がアイデンティティプロバイダーからサービスプロバイダーに渡されることを確認してください。",description_provider_tab:"アイデンティティプロバイダーとAuth0間の接続を確立します。",external_namespace:{label:"外部ネームスペース"},required:{title:"必須属性",description:"有効な${strategy}属性が次の属性にマッピングされていることを確認してください。",table:{columns:{attribute_name_label:"属性名",external_field_label:"外部フィールド"},tags:{updated:{label:"更新済み",tooltip:"この属性は更新されました。アイデンティティプロバイダーの設定を更新してください。"},removed:{label:"削除済み",tooltip:"この属性は削除されました。アイデンティティプロバイダーの設定から削除してください。"},new:{label:"新規",tooltip:"この属性は追加されました。アイデンティティプロバイダーの設定に追加してください。"}}}},optional:{title:"オプション属性",description:"これらの属性をマッピングするとユーザープロファイルが強化されますが、必須ではありません。",table:{columns:{attribute_name_label:"属性名",external_field_label:"外部フィールド"},tags:{updated:{label:"更新済み",tooltip:"この属性は更新されました。アイデンティティプロバイダーの設定を更新してください。"},removed:{label:"削除済み",tooltip:"この属性は削除されました。アイデンティティプロバイダーの設定から削除してください。"},new:{label:"新規",tooltip:"この属性は追加されました。アイデンティティプロバイダーの設定に追加してください。"}}}}},tabs:{sso:{name:"シングルサインオン",content:{title:"シングルサインオン",description:"シングルサインオンを管理・設定します。",attribute_sync_alert:{title:"シングルサインオンのマッピングが更新されました。",description:"ログインの問題を回避するため、属性を確認してアイデンティティプロバイダーの設定を更新してください。完了したら、更新されたマッピングを同期してください。",sync_button_label:"同期",sync_modal:{title:"更新されたマッピングを同期",description:"同期すると、プロバイダーの設定が最新のマッピングで更新されます。この操作は元に戻せません。",actions:{cancel_button_label:"キャンセル",proceed_button_label:"続行"}}}}},provisioning:{name:"プロビジョニング",content:{header:{title:"プロビジョニング",description:"ユーザープロファイルを組織に同期するためのプロビジョニングを設定します。",guided_setup_button_label:"ガイド付きセットアップ",provider_disabled_tooltip:"プロビジョニングを作成するにはプロバイダーを有効にしてください",enable_provisioning_tooltip:"トグルでプロビジョニングを有効にします",disable_provisioning_tooltip:"トグルでプロビジョニングを無効にします"},attribute_sync_alert:{title:"プロビジョニングのマッピングが更新されました。",description:"ログインの問題を回避するため、属性を確認してアイデンティティプロバイダーの設定を更新してください。完了したら、更新されたマッピングを同期してください。新しいトークンを生成し、アイデンティティプロバイダーに再追加する必要があります。",sync_button_label:"同期",sync_modal:{title:"更新されたマッピングを同期",description:"同期すると、プロビジョニング設定が最新のマッピングで更新され、既存のトークンが削除されます。新しいトークンを生成し、アイデンティティプロバイダーに再追加する必要があります。この操作は元に戻せません。",actions:{cancel_button_label:"キャンセル",proceed_button_label:"続行"}}},delete:{modal:{title:"Disable provisioning",content:{description:"Are you sure you want to disable provisioning? This will permanently delete the provisioning configuration and revoke access for any clients using provisioning with this provider."},actions:{cancel_button_label:"Cancel",delete_button_label:"Proceed"}}},details:{manage_tokens:{title:"ベアラートークン",description:"アイデンティティプロバイダーに提供するベアラートークンを生成します。最大2つのトークンを作成できます。",generate_button_label:"トークンを生成",max_tokens_tooltip:"最大2つのトークンが許可されています",empty_state:{title:"まだトークンが作成されていません",description:"アイデンティティプロバイダーからのSCIMリクエストを認証するためのベアラートークンを生成してください。"},table:{token_id_label:"トークンID",created_label:"作成日時",expires_label:"有効期限",actions_label:"アクション"},token_item:{token_prefix:"トークン",never_expire:"このトークンに有効期限はありません。",last_used:"最終使用: なし",status_active:"有効",status_expired:"期限切れ",delete_button_label:"削除"},create_modal:{title:"ベアラートークン情報",copy_and_close_button_label:"コピーして閉じる",content:{description:"ベアラートークンをコピーしてアイデンティティプロバイダーに提供してください。このダイアログを閉じると再表示されません。",field:{label:"トークン"}}},delete_modal:{title:"トークン${tokenId}を削除",cancel_button_label:"キャンセル",delete_button_label:"トークンを削除",content:{confirmation:"トークン${tokenId}を削除してもよろしいですか?この操作は元に戻すことができません。",description:"ダウンタイムを避けるために、このトークンを削除する前に2番目のトークンを作成してプロビジョニングクライアントに提供することを検討してください。"}}},fields:{user_id_attribute:{label:"ユーザーID属性",helper_text:"ユーザーを一意に識別する属性。"},scim_endpoint_url:{label:"SCIMエンドポイントURL"}}}}},domains:{name:"ドメイン",content:{title:"ドメイン",description:"ユーザーのメールドメインに基づいてアイデンティティプロバイダーへ誘導することで、セキュリティを強化しログインを効率化します。",create_button_text:"ドメインを追加",table:{empty_message:"ドメインがありません",columns:{name:"ドメイン名",status:"ステータス",verify:"検証"},actions:{enable_domain_tooltip:"トグルでこのドメインを有効にします",disable_domain_tooltip:"トグルでこのドメインを無効にします"},domain_statuses:{pending:"保留中",verified:"検証済み",failed:"失敗"}},domain_create:{modal:{title:"ドメインの追加",field:{label:"ドメインURL",placeholder:"domain-name.com",error:"有効なドメインを入力してください"},actions:{cancel_button_text:"キャンセル",create_button_text:"ドメインを追加"}}},domain_delete:{modal:{title:"ドメインの削除",description:{pending:"${domainName} は確認待ちであり、処理に最大48時間かかる場合があります。このドメインを削除してもよろしいですか?",verified:"${domainName} を削除すると、ユーザーのログインフローに影響を与える可能性があります。このドメインを削除してもよろしいですか?この操作は元に戻せません。"},actions:{cancel_button_text:"キャンセル",delete_button_text:"削除"}}},domain_verify:{modal:{title:"${domainName}のDNSレコードを追加",txt_record_name:{label:"TXTレコード名"},txt_record_content:{label:"TXTレコードの内容"},verification_status:{label:"検証ステータス:",pending:"保留中",description:"ドメインの検証が保留中です。「検証」をクリックしてステータスを更新するか、後でもう一度確認してください。DNS変更には最大48時間かかる場合がありますが、通常はより早く処理されます。"},actions:{verify_button_text:"検証",delete_button_text:"削除",done_button_text:"完了"},errors:{verification_failed:"${domainName}を検証できませんでした。しばらく待ってから再度お試しいただくか、DNSプロバイダーをご確認ください。"}}}}}},provider_details:{save_button_label:"保存"}},delete_sso_provider:{title:"このプロバイダーを削除",description:"一度確認すると、この操作は元に戻すことができません。",delete_button_label:"削除",modal:{title:"${providerName}を削除",description:"このプロバイダーでサインインするユーザーはアクセスできなくなります。この操作は元に戻すことができません。このプロバイダーを削除してもよろしいですか?",content:{description:"確認のためにプロバイダー名を入力してください。",field:{label:"プロバイダー名",placeholder:"プロバイダー名を入力"}},actions:{cancel_button_label:"キャンセル",delete_button_label:"削除"}}},remove_sso_provider:{title:"組織からこのプロバイダーを削除",description:"確認後、この操作は元に戻すことができません。",remove_button_label:"削除",modal:{title:"${organizationName}から${providerName}を削除",description:"この操作により、この組織のすべてのユーザーの${providerName}へのアクセスが取り消されます。ユーザーは削除されませんが、このプロバイダーを使用してサインインできなくなります",content:{description:"確認のためプロバイダー名を入力してください。",field:{label:"プロバイダー名",placeholder:"プロバイダー名を入力"}},actions:{cancel_button_text:"キャンセル",remove_button_text:"実行"}}},sso_provider_details:{unsaved_changes_text:"未保存の変更",submit_button_label:"保存"},notifications:{delete_success:"${providerName}が削除されました。",remove_success:"${providerName}が${organizationName}から削除されました",update_success:"${providerName}への変更が保存されました。",general_error:"リクエストの処理中に問題が発生しました。もう一度お試しいただくか、問題が解決しない場合はサポートにお問い合わせください。",domain_create:{success:"${domainName}が作成されました。",error:"ドメインの作成中に問題が発生しました。",on_before:"ドメインが有効ではありません。"},domain_verify:{success:"${domainName}が検証されました。",error:"ドメインの検証中に問題が発生しました。",on_before:"ドメイン検証のバリデーションが正しくありません。",verification_failed:"${domainName}を検証できませんでした。しばらく待ってから再度お試しいただくか、DNSプロバイダーをご確認ください。"},domain_delete:{success:"${domainName}が削除されました。",error:"ドメインの削除中に問題が発生しました。"},domain_associate_provider:{success:"${domain}が${idp}で有効になりました"},domain_delete_provider:{success:"${domain}が${idp}で無効になりました"},provisioning_disabled_success:"プロビジョニングが無効になりました。",scim_token_delete_sucess:"トークンが削除されました。",scim_token_create_success:"トークンが正常に生成されました",sso_attributes_sync_success:"プロバイダーマッピングが更新されました。",provisioning_attributes_sync_success:"プロビジョニングマッピングが更新されました。"}},T5={title:"多要素認証方法",description:"あなたのアカウントと身元をさらに保護します",no_active_mfa:"登録されている多要素認証はありません。",component_error_title:"多要素認証コンポーネントの読み込みエラー",component_error_description:"多要素認証方法の読み込みに問題が発生しました。ページを再読み込みして、もう一度お試しください",loading:"読み込み中...",delete:"削除",enroll:"登録",submit:"送信",update:"更新",remove:"削除",enrolling:"登録中...",enrolled:"登録済み",enabled:"有効",enrollment:"登録",confirmation:"確認",remove_factor:"登録を正常に削除しました。",enroll_factor:"正常に登録されました。",enroll_totp_mfa:"ワンタイムパスワードの登録",delete_factor:"${factorName}の認証要素を削除",delete_mfa_title:"既存の認証システムを削除",delete_mfa_phone_consent:"この電話番号をSMS MFAから削除してもよろしいですか?",delete_mfa_email_consent:"このEメールアドレスを削除してもよろしいですか?",delete_mfa_totp_consent:"この認証アプリを削除しますか?","delete_mfa_push-notification_consent":"プッシュ通知による認証を削除しますか?","delete_mfa_recovery-code_consent":"このリカバリーコードを削除しますか?",cancel:"キャンセル",close:"閉じる",next:"次へ",back:"戻る","yes-remove":"はい、削除します","app-store":"App Store","google-play":"Google Play",ok:"はい",confirm:"確認",continue:"続行",confirm_delete:"削除",deleting:"削除中...",errors:{factors_loading_error:"多要素認証の読み込みエラー!",unknown_error:"不明なエラーが発生しました",delete_factor:"認証器の削除に失敗しました",failed:"失敗しました: ${message}",phone_number_required:"SMS登録には電話番号が必要です。",email_required:"メール登録にはメールアドレスが必要です。",invalid_email:"無効なメールアドレス",invalid_phone_number:"無効な電話番号",unsupported_mfa_type:"未対応のMFAタイプです: ${factorName}","push-notification":{too_many_entities:"このユーザーのプッシュ通知エンティティの数には上限があります。",unsupported_challenge_type:"Auth0 Verifier がテナントで無効になっています。ダッシュボードの Guardian MFA セクションで「プッシュ通知」をオンにすると有効にできます。",invalid_request:"必須パラメーターがありません",authorization_pending:"承認保留中: 数秒後にリクエストを再試行してください。"},totp:{invalid_request:"必須パラメーターがありません",too_many_entities:"このユーザーのTOTPエンティティの数には上限があります。",unsupported_challenge_type:"OTP Verifier がテナントで無効になっています。ダッシュボードの Guardian MFA セクションで「プッシュ通知」をオンにすると有効にできます(プッシュ通知にはOTPが含まれます)。",invalid_grant:"OTPコードが無効です"},phone:{unsupported_challenge_type:"SMS Verifier がテナントで無効になっています。ダッシュボードの Guardian MFA セクションで「SMS」をオンにすると有効にできます。",bad_gateway:"電話番号が無効です。",too_many_entities:"このユーザーのSMSエンティティの数には上限があります。"},email:{expired_token:"確認コードの有効期限が切れました",invalid_grant:"コードが無効です",access_denied:"要求された認証機能が見つかりませんでした",too_many_entities:"このユーザーのメールエンティティの数には上限があります。"}},phone:{title:"電話メッセージ ",description:"電話番号が追加されていません。","button-text":"SMS用電話番号を追加"},"push-notification":{title:"Auth0 Guardian プッシュ通知",description:"プッシュ認証が追加されていません。","button-text":"プッシュ認証を追加"},totp:{title:"ワンタイムパスワード",description:"認証システムが追加されていません。","button-text":"認証アプリを追加"},email:{title:"メール",description:"メールアドレスが追加されていません。","button-text":"メールアドレスを追加"},duo:{title:"Duoセキュリティ",description:"多要素認証にDuoアカウントを使用します。"},"webauthn-roaming":{title:"FIDOセキュリティキーによるWebAuthn",description:"二要素認証としてWebAuthn対応のセキュリティキー(FIDO2など)を使用します。","button-text":"FIDO セキュリティキーでWebAuthnを追加"},"webauthn-platform":{title:"デバイス生体認証によるWebAuthn",description:"二要素認証としてWebAuthn対応のデバイス生体認証を使用します。","button-text":"FIDOデバイス生体認証でWebAuthnを追加"},"recovery-code":{title:"リカバリーコード",description:"アカウントへのアクセスを回復するために固有のリカバリーコードを使用します。","button-text":"リカバリーコードを再生成"},enrollment_form:{email_address:"メールアドレス",phone_number:"電話番号 (SMS)",send_code:"コードを送信",sending:"送信中...",enroll_title:"本人確認",enroll_email_placeholder:"メールアドレスを入力",enroll_email_description:"認証コードを受信するためにあなたのメールアドレスを入力してください",enroll_sms_placeholder:"電話番号を入力",enroll_sms_description:"認証コードを受信するためにあなたの電話番号を入力してください",show_auth0_guardian_title:"このQRコードをAuth0 Guardianアプリでスキャンするか、URLをコピーして、この認証方法を登録してください",recovery_code_description:"このリカバリーコードをコピーして、安全な場所に保管してください。デバイスなしでログインする必要がある場合に使用します。",show_otp:{title:"この QR コードを Authenticator アプリでスキャンして、この認証方法を登録するか、コードをコピーしてください。",save_recovery:"これらのリカバリーコードを保存してください!",enter_code:"認証アプリのコードを入力してください",one_time_passcode:"ワンタイムパスコード",verify_code:"コードを確認",copy_as_code:"コードとしてコピー",verifying:"確認中...",enter_verify_code:"${verifier}に送信された6桁のコードを入力してください",enter_opt_code:"認証アプリのコードを入力してください",install_guardian_description:"続行するには、お使いのモバイルデバイスからアプリストア経由でAuth0 Guardianアプリをインストールしてください。"}}},j5={header:{title:"メンバー",description:"組織のメンバーを管理します。"},invite_button:"メンバーを招待",tabs:{members:"メンバー",invitations:"招待"},member:{table:{columns:{name:"名前",email:"メール",roles:"ロール"},empty_message:"メンバーが見つかりません。"},remove:{title:"メンバーを削除",description:"この組織から${name}を削除してもよろしいですか?",confirm_button:"削除",cancel_button:"キャンセル",success:"${name}が組織から削除されました。"},error:{fetch_failed:"メンバーの読み込みに失敗しました。もう一度お試しください。",remove_failed:"メンバーの削除に失敗しました。もう一度お試しください。"}},invitation:{table:{columns:{email:"メール",status:"ステータス",inviter:"招待者",created_at:"作成日",expires_at:"有効期限",roles:"ロール"},empty_message:"保留中の招待はありません。",search_placeholder:"メールで検索...",filter_by_role:"ロールで絞り込み",all_roles:"すべて",reset_filter:"リセット",showing_results:"${start}〜${end} / ${total}件",status_pending:"保留中",status_expired:"期限切れ"},actions:{menu_label:"アクション",view_details:"詳細を表示",copy_url:"招待URLをコピー",revoke_and_resend:"取り消して再送信",revoke:"招待を取り消す"},create:{title:"メンバーを招待",description:"この組織に参加するための招待を送信します。",email_label:"メールアドレス",email_placeholder:"メールアドレスを入力してEnterを押してください",email_helper:"カンマ区切りで最大10名まで追加できます。",email_limit_error:"メールアドレスは最大10件まで追加できます。",email_invalid_error:"有効なメールアドレスを入力してください。",email_duplicate_error:"このメールアドレスは既に追加されています。",email_required_error:"メールアドレスを1つ以上入力してください。",roles_label:"ロール",roles_placeholder:"ロールを選択(任意)",provider_label:"プロバイダー",provider_placeholder:"プロバイダーを選択(任意)",provider_helper:"選択しない場合、メンバーは任意のプロバイダーでログインできます。",submit_button:"招待を送信",creating:"作成中...",cancel_button:"キャンセル",success:"${email}に招待を送信しました。"},details:{title:"招待の詳細",email_label:"メール",status_label:"ステータス",roles_label:"ロール",provider_label:"IDプロバイダー",created_at_label:"作成日",expires_at_label:"有効期限",invited_by_label:"招待者",invitation_url_label:"招待URL",copy_url_button:"コピー",close_button:"閉じる",revoke_button:"招待を取り消す",resend_button:"取り消して再送信"},revoke:{title:"招待を取り消す",description:"${email}への招待を取り消してもよろしいですか?",confirm_button:"取り消す",cancel_button:"キャンセル",success:"${email}への招待が取り消されました。"},revoke_resend:{title:"招待を取り消して再送信",description:"現在の招待を取り消し、${email}に新しい招待を送信してもよろしいですか?",confirm_button:"続行",cancel_button:"キャンセル"},success:{url_copied:"招待URLをクリップボードにコピーしました。",invitation_resent:"${email}に招待を再送信しました。"},error:{fetch_failed:"招待の読み込みに失敗しました。もう一度お試しください。",create_failed:"招待の送信に失敗しました。もう一度お試しください。",revoke_failed:"招待の取り消しに失敗しました。もう一度お試しください。",resend_failed:"招待の再送信に失敗しました。もう一度お試しください。",revoke_resend_failed:"招待の取り消しと再送信に失敗しました。もう一度お試しください。",copy_url_failed:"招待URLのコピーに失敗しました。もう一度お試しください。"}}},CV={common:R5,gate_keeper:B5,domain_management:k5,organization_management:M5,idp_management:N5,mfa:T5,member_management:j5};const wV=Object.freeze(Object.defineProperty({__proto__:null,common:R5,default:CV,domain_management:k5,gate_keeper:B5,idp_management:N5,member_management:j5,mfa:T5,organization_management:M5},Symbol.toStringTag,{value:"Module"}));var xu={},Pg,P5;function EV(){return P5||(P5=1,Pg=function(){return typeof Promise=="function"&&Promise.prototype&&Promise.prototype.then}),Pg}var zg={},ei={},z5;function is(){if(z5)return ei;z5=1;let e;const t=[0,26,44,70,100,134,172,196,242,292,346,404,466,532,581,655,733,815,901,991,1085,1156,1258,1364,1474,1588,1706,1828,1921,2051,2185,2323,2465,2611,2761,2876,3034,3196,3362,3532,3706];return ei.getSymbolSize=function(r){if(!r)throw new Error('"version" cannot be null or undefined');if(r<1||r>40)throw new Error('"version" should be in range from 1 to 40');return r*4+17},ei.getSymbolTotalCodewords=function(r){return t[r]},ei.getBCHDigit=function(n){let r=0;for(;n!==0;)r++,n>>>=1;return r},ei.setToSJISFunction=function(r){if(typeof r!="function")throw new Error('"toSJISFunc" is not a valid function.');e=r},ei.isKanjiModeEnabled=function(){return typeof e<"u"},ei.toSJIS=function(r){return e(r)},ei}var Lg={},L5;function Og(){return L5||(L5=1,(function(e){e.L={bit:1},e.M={bit:0},e.Q={bit:3},e.H={bit:2};function t(n){if(typeof n!="string")throw new Error("Param is not a string");switch(n.toLowerCase()){case"l":case"low":return e.L;case"m":case"medium":return e.M;case"q":case"quartile":return e.Q;case"h":case"high":return e.H;default:throw new Error("Unknown EC Level: "+n)}}e.isValid=function(r){return r&&typeof r.bit<"u"&&r.bit>=0&&r.bit<4},e.from=function(r,o){if(e.isValid(r))return r;try{return t(r)}catch{return o}}})(Lg)),Lg}var Ig,O5;function SV(){if(O5)return Ig;O5=1;function e(){this.buffer=[],this.length=0}return e.prototype={get:function(t){const n=Math.floor(t/8);return(this.buffer[n]>>>7-t%8&1)===1},put:function(t,n){for(let r=0;r>>n-r-1&1)===1)},getLengthInBits:function(){return this.length},putBit:function(t){const n=Math.floor(this.length/8);this.buffer.length<=n&&this.buffer.push(0),t&&(this.buffer[n]|=128>>>this.length%8),this.length++}},Ig=e,Ig}var Ug,I5;function DV(){if(I5)return Ug;I5=1;function e(t){if(!t||t<1)throw new Error("BitMatrix size must be defined and greater than 0");this.size=t,this.data=new Uint8Array(t*t),this.reservedBit=new Uint8Array(t*t)}return e.prototype.set=function(t,n,r,o){const s=t*this.size+n;this.data[s]=r,o&&(this.reservedBit[s]=!0)},e.prototype.get=function(t,n){return this.data[t*this.size+n]},e.prototype.xor=function(t,n,r){this.data[t*this.size+n]^=r},e.prototype.isReserved=function(t,n){return this.reservedBit[t*this.size+n]},Ug=e,Ug}var Vg={},U5;function FV(){return U5||(U5=1,(function(e){const t=is().getSymbolSize;e.getRowColCoords=function(r){if(r===1)return[];const o=Math.floor(r/7)+2,s=t(r),u=s===145?26:Math.ceil((s-13)/(2*o-2))*2,c=[s-7];for(let d=1;d=0&&o<=7},e.from=function(o){return e.isValid(o)?parseInt(o,10):void 0},e.getPenaltyN1=function(o){const s=o.size;let u=0,c=0,d=0,p=null,m=null;for(let g=0;g=5&&(u+=t.N1+(c-5)),p=A,c=1),A=o.get(y,g),A===m?d++:(d>=5&&(u+=t.N1+(d-5)),m=A,d=1)}c>=5&&(u+=t.N1+(c-5)),d>=5&&(u+=t.N1+(d-5))}return u},e.getPenaltyN2=function(o){const s=o.size;let u=0;for(let c=0;c=10&&(c===1488||c===93)&&u++,d=d<<1&2047|o.get(m,p),m>=10&&(d===1488||d===93)&&u++}return u*t.N3},e.getPenaltyN4=function(o){let s=0;const u=o.data.length;for(let d=0;d=0;){const u=s[0];for(let d=0;d0){const c=new Uint8Array(this.degree);return c.set(s,u),c}return s},Yg=t,Yg}var Kg={},qg={},Zg={},Z5;function W5(){return Z5||(Z5=1,Zg.isValid=function(t){return!isNaN(t)&&t>=1&&t<=40}),Zg}var Ya={},X5;function $5(){if(X5)return Ya;X5=1;const e="[0-9]+",t="[A-Z $%*+\\-./:]+";let n="(?:[u3000-u303F]|[u3040-u309F]|[u30A0-u30FF]|[uFF00-uFFEF]|[u4E00-u9FAF]|[u2605-u2606]|[u2190-u2195]|u203B|[u2010u2015u2018u2019u2025u2026u201Cu201Du2225u2260]|[u0391-u0451]|[u00A7u00A8u00B1u00B4u00D7u00F7])+";n=n.replace(/u/g,"\\u");const r="(?:(?![A-Z0-9 $%*+\\-./:]|"+n+`)(?:.|[\r +]))+`;Ya.KANJI=new RegExp(n,"g"),Ya.BYTE_KANJI=new RegExp("[^A-Z0-9 $%*+\\-./:]+","g"),Ya.BYTE=new RegExp(r,"g"),Ya.NUMERIC=new RegExp(e,"g"),Ya.ALPHANUMERIC=new RegExp(t,"g");const o=new RegExp("^"+n+"$"),s=new RegExp("^"+e+"$"),u=new RegExp("^[A-Z0-9 $%*+\\-./:]+$");return Ya.testKanji=function(d){return o.test(d)},Ya.testNumeric=function(d){return s.test(d)},Ya.testAlphanumeric=function(d){return u.test(d)},Ya}var J5;function ss(){return J5||(J5=1,(function(e){const t=W5(),n=$5();e.NUMERIC={id:"Numeric",bit:1,ccBits:[10,12,14]},e.ALPHANUMERIC={id:"Alphanumeric",bit:2,ccBits:[9,11,13]},e.BYTE={id:"Byte",bit:4,ccBits:[8,16,16]},e.KANJI={id:"Kanji",bit:8,ccBits:[8,10,12]},e.MIXED={bit:-1},e.getCharCountIndicator=function(s,u){if(!s.ccBits)throw new Error("Invalid mode: "+s);if(!t.isValid(u))throw new Error("Invalid version: "+u);return u>=1&&u<10?s.ccBits[0]:u<27?s.ccBits[1]:s.ccBits[2]},e.getBestModeForData=function(s){return n.testNumeric(s)?e.NUMERIC:n.testAlphanumeric(s)?e.ALPHANUMERIC:n.testKanji(s)?e.KANJI:e.BYTE},e.toString=function(s){if(s&&s.id)return s.id;throw new Error("Invalid mode")},e.isValid=function(s){return s&&s.bit&&s.ccBits};function r(o){if(typeof o!="string")throw new Error("Param is not a string");switch(o.toLowerCase()){case"numeric":return e.NUMERIC;case"alphanumeric":return e.ALPHANUMERIC;case"kanji":return e.KANJI;case"byte":return e.BYTE;default:throw new Error("Unknown mode: "+o)}}e.from=function(s,u){if(e.isValid(s))return s;try{return r(s)}catch{return u}}})(qg)),qg}var e6;function TV(){return e6||(e6=1,(function(e){const t=is(),n=G5(),r=Og(),o=ss(),s=W5(),u=7973,c=t.getBCHDigit(u);function d(y,A,w){for(let b=1;b<=40;b++)if(A<=e.getCapacity(b,w,y))return b}function p(y,A){return o.getCharCountIndicator(y,A)+4}function m(y,A){let w=0;return y.forEach(function(b){const x=p(b.mode,A);w+=x+b.getBitsLength()}),w}function g(y,A){for(let w=1;w<=40;w++)if(m(y,w)<=e.getCapacity(w,A,o.MIXED))return w}e.from=function(A,w){return s.isValid(A)?parseInt(A,10):w},e.getCapacity=function(A,w,b){if(!s.isValid(A))throw new Error("Invalid QR Code version");typeof b>"u"&&(b=o.BYTE);const x=t.getSymbolTotalCodewords(A),E=n.getTotalCodewordsCount(A,w),S=(x-E)*8;if(b===o.MIXED)return S;const F=S-p(b,A);switch(b){case o.NUMERIC:return Math.floor(F/10*3);case o.ALPHANUMERIC:return Math.floor(F/11*2);case o.KANJI:return Math.floor(F/13);case o.BYTE:default:return Math.floor(F/8)}},e.getBestVersionForData=function(A,w){let b;const x=r.from(w,r.M);if(Array.isArray(A)){if(A.length>1)return g(A,x);if(A.length===0)return 1;b=A[0]}else b=A;return d(b.mode,b.getLength(),x)},e.getEncodedBits=function(A){if(!s.isValid(A)||A<7)throw new Error("Invalid QR Code version");let w=A<<12;for(;t.getBCHDigit(w)-c>=0;)w^=u<=0;)d^=t<0&&(s=this.data.substr(o),u=parseInt(s,10),r.put(u,c*3+1))},$g=t,$g}var Jg,r6;function zV(){if(r6)return Jg;r6=1;const e=ss(),t=["0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"," ","$","%","*","+","-",".","/",":"];function n(r){this.mode=e.ALPHANUMERIC,this.data=r}return n.getBitsLength=function(o){return 11*Math.floor(o/2)+6*(o%2)},n.prototype.getLength=function(){return this.data.length},n.prototype.getBitsLength=function(){return n.getBitsLength(this.data.length)},n.prototype.write=function(o){let s;for(s=0;s+2<=this.data.length;s+=2){let u=t.indexOf(this.data[s])*45;u+=t.indexOf(this.data[s+1]),o.put(u,11)}this.data.length%2&&o.put(t.indexOf(this.data[s]),6)},Jg=n,Jg}var e3,a6;function LV(){if(a6)return e3;a6=1;const e=ss();function t(n){this.mode=e.BYTE,typeof n=="string"?this.data=new TextEncoder().encode(n):this.data=new Uint8Array(n)}return t.getBitsLength=function(r){return r*8},t.prototype.getLength=function(){return this.data.length},t.prototype.getBitsLength=function(){return t.getBitsLength(this.data.length)},t.prototype.write=function(n){for(let r=0,o=this.data.length;r=33088&&s<=40956)s-=33088;else if(s>=57408&&s<=60351)s-=49472;else throw new Error("Invalid SJIS character: "+this.data[o]+` +Make sure your charset is UTF-8`);s=(s>>>8&255)*192+(s&255),r.put(s,13)}},t3=n,t3}var n3={exports:{}},i6;function IV(){return i6||(i6=1,(function(e){var t={single_source_shortest_paths:function(n,r,o){var s={},u={};u[r]=0;var c=t.PriorityQueue.make();c.push(r,0);for(var d,p,m,g,y,A,w,b,x;!c.empty();){d=c.pop(),p=d.value,g=d.cost,y=n[p]||{};for(m in y)y.hasOwnProperty(m)&&(A=y[m],w=g+A,b=u[m],x=typeof u[m]>"u",(x||b>w)&&(u[m]=w,c.push(m,w),s[m]=p))}if(typeof o<"u"&&typeof u[o]>"u"){var E=["Could not find a path from ",r," to ",o,"."].join("");throw new Error(E)}return s},extract_shortest_path_from_predecessor_list:function(n,r){for(var o=[],s=r;s;)o.push(s),n[s],s=n[s];return o.reverse(),o},find_path:function(n,r,o){var s=t.single_source_shortest_paths(n,r,o);return t.extract_shortest_path_from_predecessor_list(s,o)},PriorityQueue:{make:function(n){var r=t.PriorityQueue,o={},s;n=n||{};for(s in r)r.hasOwnProperty(s)&&(o[s]=r[s]);return o.queue=[],o.sorter=n.sorter||r.default_sorter,o},default_sorter:function(n,r){return n.cost-r.cost},push:function(n,r){var o={value:n,cost:r};this.queue.push(o),this.queue.sort(this.sorter)},pop:function(){return this.queue.shift()},empty:function(){return this.queue.length===0}}};e.exports=t})(n3)),n3.exports}var s6;function UV(){return s6||(s6=1,(function(e){const t=ss(),n=PV(),r=zV(),o=LV(),s=OV(),u=$5(),c=is(),d=IV();function p(E){return unescape(encodeURIComponent(E)).length}function m(E,S,F){const R=[];let k;for(;(k=E.exec(F))!==null;)R.push({data:k[0],index:k.index,mode:S,length:k[0].length});return R}function g(E){const S=m(u.NUMERIC,t.NUMERIC,E),F=m(u.ALPHANUMERIC,t.ALPHANUMERIC,E);let R,k;return c.isKanjiModeEnabled()?(R=m(u.BYTE,t.BYTE,E),k=m(u.KANJI,t.KANJI,E)):(R=m(u.BYTE_KANJI,t.BYTE,E),k=[]),S.concat(F,R,k).sort(function(N,P){return N.index-P.index}).map(function(N){return{data:N.data,mode:N.mode,length:N.length}})}function y(E,S){switch(S){case t.NUMERIC:return n.getBitsLength(E);case t.ALPHANUMERIC:return r.getBitsLength(E);case t.KANJI:return s.getBitsLength(E);case t.BYTE:return o.getBitsLength(E)}}function A(E){return E.reduce(function(S,F){const R=S.length-1>=0?S[S.length-1]:null;return R&&R.mode===F.mode?(S[S.length-1].data+=F.data,S):(S.push(F),S)},[])}function w(E){const S=[];for(let F=0;F=0&&V<=6&&(W===0||W===6)||W>=0&&W<=6&&(V===0||V===6)||V>=2&&V<=4&&W>=2&&W<=4?B.set($+V,q+W,!0,!0):B.set($+V,q+W,!1,!0))}}function w(B){const N=B.size;for(let P=8;P>V&1)===1,B.set(Q,$,q,!0),B.set($,Q,q,!0)}function E(B,N,P){const U=B.size,Q=m.getEncodedBits(N,P);let $,q;for($=0;$<15;$++)q=(Q>>$&1)===1,$<6?B.set($,8,q,!0):$<8?B.set($+1,8,q,!0):B.set(U-15+$,8,q,!0),$<8?B.set(8,U-$-1,q,!0):$<9?B.set(8,15-$-1+1,q,!0):B.set(8,15-$-1,q,!0);B.set(U-8,8,1,!0)}function S(B,N){const P=B.size;let U=-1,Q=P-1,$=7,q=0;for(let V=P-1;V>0;V-=2)for(V===6&&V--;;){for(let W=0;W<2;W++)if(!B.isReserved(Q,V-W)){let ae=!1;q>>$&1)===1),B.set(Q,V-W,ae),$--,$===-1&&(q++,$=7)}if(Q+=U,Q<0||P<=Q){Q-=U,U=-U;break}}}function F(B,N,P){const U=new n;P.forEach(function(W){U.put(W.mode.bit,4),U.put(W.getLength(),g.getCharCountIndicator(W.mode,B)),W.write(U)});const Q=e.getSymbolTotalCodewords(B),$=c.getTotalCodewordsCount(B,N),q=(Q-$)*8;for(U.getLengthInBits()+4<=q&&U.put(0,4);U.getLengthInBits()%8!==0;)U.putBit(0);const V=(q-U.getLengthInBits())/8;for(let W=0;W=7&&x(W,N),S(W,q),isNaN(U)&&(U=u.getBestMask(W,E.bind(null,W,P))),u.applyMask(U,W),E(W,P,U),{modules:W,version:N,errorCorrectionLevel:P,maskPattern:U,segments:Q}}return zg.create=function(N,P){if(typeof N>"u"||N==="")throw new Error("No input text");let U=t.M,Q,$;return typeof P<"u"&&(U=t.from(P.errorCorrectionLevel,t.M),Q=p.from(P.version),$=u.from(P.maskPattern),P.toSJISFunc&&e.setToSJISFunction(P.toSJISFunc)),k(N,Q,U,$)},zg}var r3={},a3={},l6;function c6(){return l6||(l6=1,(function(e){function t(n){if(typeof n=="number"&&(n=n.toString()),typeof n!="string")throw new Error("Color should be defined as hex string");let r=n.slice().replace("#","").split("");if(r.length<3||r.length===5||r.length>8)throw new Error("Invalid hex color: "+n);(r.length===3||r.length===4)&&(r=Array.prototype.concat.apply([],r.map(function(s){return[s,s]}))),r.length===6&&r.push("F","F");const o=parseInt(r.join(""),16);return{r:o>>24&255,g:o>>16&255,b:o>>8&255,a:o&255,hex:"#"+r.slice(0,6).join("")}}e.getOptions=function(r){r||(r={}),r.color||(r.color={});const o=typeof r.margin>"u"||r.margin===null||r.margin<0?4:r.margin,s=r.width&&r.width>=21?r.width:void 0,u=r.scale||4;return{width:s,scale:s?4:u,margin:o,color:{dark:t(r.color.dark||"#000000ff"),light:t(r.color.light||"#ffffffff")},type:r.type,rendererOpts:r.rendererOpts||{}}},e.getScale=function(r,o){return o.width&&o.width>=r+o.margin*2?o.width/(r+o.margin*2):o.scale},e.getImageWidth=function(r,o){const s=e.getScale(r,o);return Math.floor((r+o.margin*2)*s)},e.qrToImageData=function(r,o,s){const u=o.modules.size,c=o.modules.data,d=e.getScale(u,s),p=Math.floor((u+s.margin*2)*d),m=s.margin*d,g=[s.color.light,s.color.dark];for(let y=0;y=m&&A>=m&&y"u"&&(!u||!u.getContext)&&(d=u,u=void 0),u||(p=r()),d=t.getOptions(d);const m=t.getImageWidth(s.modules.size,d),g=p.getContext("2d"),y=g.createImageData(m,m);return t.qrToImageData(y.data,s,d),n(g,p,m),g.putImageData(y,0,0),p},e.renderToDataURL=function(s,u,c){let d=c;typeof d>"u"&&(!u||!u.getContext)&&(d=u,u=void 0),d||(d={});const p=e.render(s,u,d),m=d.type||"image/png",g=d.rendererOpts||{};return p.toDataURL(m,g.quality)}})(r3)),r3}var o3={},f6;function QV(){if(f6)return o3;f6=1;const e=c6();function t(o,s){const u=o.a/255,c=s+'="'+o.hex+'"';return u<1?c+" "+s+'-opacity="'+u.toFixed(2).slice(1)+'"':c}function n(o,s,u){let c=o+s;return typeof u<"u"&&(c+=" "+u),c}function r(o,s,u){let c="",d=0,p=!1,m=0;for(let g=0;g0&&y>0&&o[g-1]||(c+=p?n("M",y+u,.5+A+u):n("m",d,0),d=0,p=!1),y+1':"",A="',w='viewBox="0 0 '+g+" "+g+'"',x=''+y+A+` +`;return typeof c=="function"&&c(null,x),x},o3}var h6;function GV(){if(h6)return xu;h6=1;const e=EV(),t=VV(),n=HV(),r=QV();function o(s,u,c,d,p){const m=[].slice.call(arguments,1),g=m.length,y=typeof m[g-1]=="function";if(!y&&!e())throw new Error("Callback required as last argument");if(y){if(g<2)throw new Error("Too few arguments provided");g===2?(p=c,c=u,u=d=void 0):g===3&&(u.getContext&&typeof p>"u"?(p=d,d=void 0):(p=d,d=c,c=u,u=void 0))}else{if(g<1)throw new Error("Too few arguments provided");return g===1?(c=u,u=d=void 0):g===2&&!u.getContext&&(d=c,c=u,u=void 0),new Promise(function(A,w){try{const b=t.create(c,d);A(s(b,u,d))}catch(b){w(b)}})}try{const A=t.create(c,d);p(null,s(A,u,d))}catch(A){p(A)}}return xu.create=t.create,xu.toCanvas=o.bind(null,n.render),xu.toDataURL=o.bind(null,n.renderToDataURL),xu.toString=o.bind(null,function(s,u,c){return r.render(s,c)}),xu}var m6=GV();const YV=ul({__proto__:null,default:sh(m6)},[m6])})); diff --git a/universal-components/src/routes/index.ts b/universal-components/src/routes/index.ts index bc2fe86faa..3365df4f6d 100644 --- a/universal-components/src/routes/index.ts +++ b/universal-components/src/routes/index.ts @@ -1,14 +1,16 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import { lazy } from 'react'; -// Components (and hooks like `useCoreClient`) are exposed from the package root, -// while `Auth0ComponentProvider` lives on the `/spa` subpath. Merge both so the -// wrapper in `src/index.tsx` can destructure everything from a single module. -export const mintlifyLoader = () => - Promise.all([ - import('@auth0/universal-components-react'), - import('@auth0/universal-components-react/spa'), - ]).then(([components, provider]) => ({ ...components, ...provider })); +// Main entry exports *View components + useCoreClient but not Auth0ComponentProvider. +// /spa entry exports Auth0ComponentProvider but not View components or useCoreClient. +// Merge both to satisfy getWrapper's needs. +export const mintlifyLoader = async () => { + const [components, provider] = await Promise.all([ + import("@auth0/universal-components-react"), + import("@auth0/universal-components-react/spa"), + ]); + return { ...components, ...provider }; +}; // Component key mapping export const componentRoutes: Record< From 4efc2099e3f8ccba74d73088b580b039a1d62821 Mon Sep 17 00:00:00 2001 From: Carlos Date: Tue, 9 Jun 2026 19:11:27 +0200 Subject: [PATCH 48/50] Update --- ...ative-passkeys-for-mobile-applications.mdx | 2 +- .../android/android-overview.mdx | 17 +- .../android/android-theming.mdx | 25 +- .../components/auth-methods-management.mdx | 19 +- .../android/components/factors/passkeys.mdx | 17 +- .../components/my-account-overview.mdx | 33 +- .../components/auth-methods-management.mdx | 21 +- .../ios/components/factors/passkeys.mdx | 23 +- .../ios/components/my-account-overview.mdx | 37 ++- .../universal-components/ios/ios-overview.mdx | 19 +- .../universal-components/ios/ios-theming.mdx | 21 +- .../universal-components-overview.mdx | 2 +- .../web/auth0-component-provider.mdx | 22 +- .../web/components/build-delegated-admin.mdx | 173 +++++----- .../web/components/configure-org-domains.mdx | 281 ++++++++-------- .../components/edit-organization-details.mdx | 281 ++++++++-------- .../web/components/sso-provider-create.mdx | 125 +++---- .../web/components/sso-provider-edit.mdx | 311 +++++++++--------- .../web/components/sso-provider-table.mdx | 311 +++++++++--------- .../web/universal-components-style.mdx | 224 ++++++------- .../universal-components/web/web-overview.mdx | 36 +- 21 files changed, 1055 insertions(+), 945 deletions(-) diff --git a/main/docs/authenticate/database-connections/passkeys/native-passkeys-for-mobile-applications.mdx b/main/docs/authenticate/database-connections/passkeys/native-passkeys-for-mobile-applications.mdx index 7fd32fd7a6..f2140de3b5 100644 --- a/main/docs/authenticate/database-connections/passkeys/native-passkeys-for-mobile-applications.mdx +++ b/main/docs/authenticate/database-connections/passkeys/native-passkeys-for-mobile-applications.mdx @@ -55,7 +55,7 @@ For end users to authenticate with a single passkey with across different applic 1. Navigate to [Applications > Applications](https://manage.auth0.com/#/applications) and select the application you wish to update. 2. At the bottom of the Settings tab, select **Advanced Settings**. Then, choose the **Device Settings** tab. -3. Complete the **iOS** and **Android** sections as needed for your application. Then, click **Save Changes**. +3. Complete the **iOS** or **Android** sections as needed for your application. Then, click **Save Changes**. 4. In the Advanced Settings section, select the **Grant Types** tab. 5. Enable the **Passkey** grant, then select **Save Changes**. diff --git a/main/docs/get-started/universal-components/android/android-overview.mdx b/main/docs/get-started/universal-components/android/android-overview.mdx index b84a3617e0..32e746d112 100644 --- a/main/docs/get-started/universal-components/android/android-overview.mdx +++ b/main/docs/get-started/universal-components/android/android-overview.mdx @@ -4,9 +4,14 @@ description: Learn how to install and configure Auth0 Universal Components for A sidebarTitle: Install and Configure Universal Components --- - -Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + The Auth0 [Universal Components for Android](https://github.com/auth0/ui-components-android) SDK provides pre-built, embeddable UI for Auth0 identity flows using [Jetpack Compose](https://developer.android.com/compose). @@ -60,7 +65,7 @@ Auth0 recommends using [Auth0.Android v3+](https://github.com/auth0/Auth0.Androi Ensure [Compose](https://developer.android.com/develop/ui/compose/setup-compose-dependencies-and-compiler#setup-compose-dependencies) is enabled in your application's `build.gradle` file: -```kotlin +```kotlin wrap lines android { buildFeatures { compose = true @@ -72,7 +77,7 @@ android { To verify the Universal Components for Android SDK installation, confirm the dependency resolves by running: -```bash +```bash wrap lines ./gradlew app:dependencies | grep universal-components ``` @@ -80,7 +85,7 @@ To verify the Universal Components for Android SDK installation, confirm the dep You can review the sample application of the [Universal Components for Android](https://github.com/auth0/ui-components-android#run-the-sample-app) SDK on GitHub. -The sample includes `MainActivity.kt`, which initializes the SDK via `Auth0UniversalComponents.initialize()`, and `LoginSecurityScreen.kt`, which renders the `AuthenticatorSettingsComponent`. +The sample application includes `MainActivity.kt` that initializes the SDK using `Auth0UniversalComponents.initialize()` and `LoginSecurityScreen.kt` that renders the `AuthenticatorSettingsComponent`. ## Next steps diff --git a/main/docs/get-started/universal-components/android/android-theming.mdx b/main/docs/get-started/universal-components/android/android-theming.mdx index 3f19ab630d..01219507d5 100644 --- a/main/docs/get-started/universal-components/android/android-theming.mdx +++ b/main/docs/get-started/universal-components/android/android-theming.mdx @@ -4,9 +4,14 @@ description: Learn how to customize style and themes for Universal Components on sidebarTitle: Customize Style and Themes --- - -Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + Auth0 [Universal Components for Android](https://github.com/auth0/ui-components-android) use a design token model. Visual properties such as colors, typography, spacing, corner radii, and component sizes are each expressed as a token that you can override without changes to your layouts. @@ -14,7 +19,7 @@ Universal Components ship with a default Auth0 theme. You can provide your own t ## How theming works -Universal Components for Android uses a Jetpack Compose theme that mirrors Material 3's `MaterialTheme` pattern. +Universal Components for Android use a Jetpack Compose theme that mirrors Material 3's `MaterialTheme` pattern. You can wrap SDK content using `Auth0Theme { ... }` to provide tokens, or pass `themeConfiguration` directly to `AuthenticatorSettingsComponent`. @@ -24,7 +29,7 @@ You can read tokens inside any composable using `Auth0Theme.colors`, `Auth0Theme If you do not configure a theme, Universal Components for Android render the Auth0 default theme. The following example displays the `AuthenticatorSettingsComponent` without any customization: -```kotlin +```kotlin wrap lines @Composable fun MFASettingsScreen() { AuthenticatorSettingsComponent() @@ -41,7 +46,7 @@ You can override specific tokens while Universal Components for Android render e The following example overrides the tokens `Auth0Color.light().copy(...)`, `Auth0Color.dark()`, or `Auth0Typography.default().copy(...)`: -```kotlin +```kotlin wrap lines @Composable fun MFASettingsScreen() { AuthenticatorSettingsComponent( @@ -59,7 +64,7 @@ fun MFASettingsScreen() { To force dark mode, you can wrap the component in `Auth0Theme(darkTheme = true)` or pass the dark color scheme explicitly: -```kotlin +```kotlin wrap lines // Option 1: Force dark mode via Auth0Theme @Composable fun MFASettingsScreen() { @@ -83,7 +88,7 @@ fun MFASettingsScreen() { Provide your own branding theme that combines colors, typography, and shapes into a single `Auth0ThemeConfiguration` configuration: -```kotlin +```kotlin wrap lines @Composable fun MFASettingsScreen() { AuthenticatorSettingsComponent( @@ -121,7 +126,7 @@ fun MFASettingsScreen() { Access theme tokens inside an `Auth0Theme { ... }` composable using the accessor object: -```kotlin +```kotlin wrap lines @Composable fun CustomAuthCard() { Card( @@ -150,7 +155,7 @@ fun CustomAuthCard() { You can keep the theme configuration in state to swap between light and dark (or brand variants) without recreating the screen: -```kotlin +```kotlin wrap lines @Composable fun MFASettingsScreen() { var isDarkMode by remember { mutableStateOf(false) } diff --git a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx index 2a22b02299..5a62929a5b 100644 --- a/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/android/components/auth-methods-management.mdx @@ -1,12 +1,17 @@ --- -title: Auth Methods Management on Android +title: Authentication Methods Management on Android description: Render a full-screen UI that lets users enroll, review, and remove MFA factors, passkeys, and recovery codes using the Auth0 My Account API on Android. sidebarTitle: AuthenticatorSettingsComponent --- - -Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + The Universal Components for Android SDK includes the `AuthenticatorSettingsComponent`, a Jetpack Compose composable that handles every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). @@ -43,7 +48,7 @@ The component handles every factor Auth0 supports with the My Account API. Each Add the `AuthenticatorSettingsComponent()` from any composable. The SDK handles all internal navigation between enrollment, verification, and management screens. -```kotlin LoginSecurityScreen.kt +```kotlin LoginSecurityScreen.kt wrap lines import androidx.compose.runtime.Composable import com.auth0.universalcomponents.presentation.ui.mfa.AuthenticatorSettingsComponent @@ -72,7 +77,7 @@ To learn more about the full token catalog and dark-mode patterns, read [Customi The `AuthenticatorSettingsComponent` participates in Compose's `NavHost` when present and does not need special wiring. Use it like any other composable. When it is a destination in your `NavHost`, back-navigation defers to the host's `NavController`. -```kotlin +```kotlin wrap lines @Composable fun AccountNavGraph(navController: NavHostController) { NavHost(navController, startDestination = "settings") { @@ -88,7 +93,7 @@ Internally, the SDK manages its own nested navigation between enrollment, verifi All user-facing strings live in the SDK's `values/strings.xml` file. You can override any string in your application by redefining the same key in your own `values/strings.xml` file: -```xml +```xml wrap lines Next diff --git a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx index baadf3a2a3..e83e8556ed 100644 --- a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx @@ -4,9 +4,14 @@ description: Learn about the SDK-specific behavior, application-side entitlement sidebarTitle: Passkeys --- - -Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + The [`AuthenticatorSettingsComponent`](/docs/get-started/universal-components/android/components/auth-methods-management) can render the Auth0 [passkey](/docs/authenticate/database-connections/passkeys) enrollment flow. @@ -22,14 +27,16 @@ Unlike other factors, passkeys require application-side platform entitlements th To enable passkey support in the Universal Components for Android SDK: +* Configure a custom domain on your Auth0 tenant. To learn more, read [Custom Domains](/docs/customize/custom-domains). * **Enable passkeys on your Auth0 database connection**. To learn how to enable passkeys in your Auth0 tenant, read [Passkeys](/docs/authenticate/database-connections/passkeys/configure-passkey-policy). -* **Install and configure Universal Components for Android**. To install Universal Components, configure your Auth0 tenant, and initialize the SDK, read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview). Set `PasskeyConfiguration` on the SDK initializer if your integration needs a specific connection or linked identity. +* **Register your Android application package and SHA-256 signing fingerprints in your Auth0 application**. To learn more, read [Native Passkeys for Mobile Applications](/docs/authenticate/database-connections/passkeys/native-passkeys-for-mobile-applications#configure-auth0-dashboard). + +* **Install and configure Universal Components for Android**. To install Universal Components, configure your Auth0 tenant, and initialize the SDK, read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/android/components/my-account-overview). * **Confirm Android version**. Passkeys require Android **14+** (API 34+) for the full Credential Manager experience. On Android **11–13** (API 30–33), passkeys sync through Google Password Manager on devices with up-to-date Play Services. -* **Register your Android application package and SHA-256 signing fingerprints**. To learn more, read [Enable Android App Links Support](/docs/get-started/applications/enable-android-app-links-support). ## Platform setup diff --git a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx index 2d0b6b57e0..b5905a7f78 100644 --- a/main/docs/get-started/universal-components/android/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/android/components/my-account-overview.mdx @@ -4,13 +4,15 @@ description: "Describes how to use Universal Components to build self-service ac sidebarTitle: Build Account Security UI --- - -Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + - -The My Account API currently enforces low rate limits, especially on free-tier tenants. This may cause errors while using these components. - Auth0 Universal Components for Android allow you to build a self-service account security UI within your [native Android application](/docs/get-started/auth0-overview/create-applications#create-application-in-auth0). @@ -18,7 +20,11 @@ With the `AuthenticatorSettingsComponent`, users can manage their own authentica ## How it works -The `AuthenticatorSettingsComponent` uses the Auth0 My Account API's [authentication methods](/docs/manage-users/my-account-api#manage-authentication-methods) to render an authentication-methods management UI inside your application. +The `AuthenticatorSettingsComponent` uses the Auth0 [My Account API's authentication methods](/docs/manage-users/my-account-api#manage-authentication-methods) to render an authentication-methods management UI inside your application. + + +The My Account API currently enforces low rate limits, especially on free-tier tenants. This may cause errors while using these components. + When an authenticated user opens their account settings screen, the [Auth0.Android](https://github.com/auth0/Auth0.Android) SDK retrieves an [access token](/docs/secure/tokens/access-tokens) scoped to the My Account API audience. @@ -48,7 +54,12 @@ The `AuthenticatorSettingsComponent` uses the access token to call the My Accoun https://YOUR_AUTH0_DOMAIN/android/YOUR_PACKAGE_NAME/callback, YOUR_SCHEME://YOUR_AUTH0_DOMAIN/android/YOUR_PACKAGE_NAME/callback ``` -5. Repeat the same for your **Allowed Logout URLs**. +5. Add the same URLs for the **Allowed Logout URLs**. + + ```text + https://YOUR_AUTH0_DOMAIN/android/YOUR_PACKAGE_NAME/callback, YOUR_SCHEME://YOUR_AUTH0_DOMAIN/android/YOUR_PACKAGE_NAME/callback + ``` + 6. Select the **API Access** tab. 7. Select **Edit** for the **Auth0 My Account API** to add the **User-delegated Access** permissions: @@ -60,7 +71,7 @@ The `AuthenticatorSettingsComponent` uses the access token to call the My Accoun 8. Select **Save** to save the permissions. -* The user's access token only includes permissions they were granted during login. +* The user's access token only includes permissions they were granted during login. * Request all four scopes if you want users to enroll, review, and remove authentication methods. @@ -72,7 +83,7 @@ Use Gradle to install the `com.auth0.universalcomponents:universal-components` p To initialize the SDK, call the `Auth0UniversalComponents.initialize(...)` method once at application start, typically from your `Application` subclass or from `onCreate` in the launcher `Activity`. -```kotlin MainActivity.kt +```kotlin MainActivity.kt wrap lines import com.auth0.android.Auth0 import com.auth0.android.authentication.AuthenticationAPIClient import com.auth0.android.authentication.storage.CredentialsManager @@ -123,7 +134,7 @@ Auth0 recommends using the Auth0.Android's `CredentialsManager` for production i To manage credentials outside the Auth0.Android SDK's `CredentialsManager`, implement the interface directly: -```kotlin +```kotlin wrap lines class AppTokenProvider : TokenProvider { override suspend fun fetchCredentials(): Credentials { // Return the user's login credentials. diff --git a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx index 84ae6ac19c..58cccc97be 100644 --- a/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx +++ b/main/docs/get-started/universal-components/ios/components/auth-methods-management.mdx @@ -1,12 +1,17 @@ --- -title: Auth Methods Management on iOS +title: Authentication Methods Management on iOS description: Render a full-screen UI that lets users enroll, review, and remove MFA factors, passkeys, and recovery codes using the Auth0 My Account API on iOS. sidebarTitle: MyAccountAuthMethodsView component --- - -Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + The Universal Components for iOS SDK includes the `MyAccountAuthMethodsView` component, a SwiftUI view that handles every enrollment, verification, listing, and removal flow using the [My Account API](/docs/manage-users/my-account-api). @@ -43,7 +48,7 @@ The component handles every authentication method factor configured with the My Add the `MyAccountAuthMethodsView` component anywhere in your SwiftUI hierarchy, typically behind a settings navigation link. -```swift SettingsView.swift +```swift SettingsView.swift wrap lines import SwiftUI import Auth0UniversalComponents @@ -87,7 +92,7 @@ By default, the `MyAccountAuthMethodsView` component manages its own `Navigation If your application already owns a navigation stack, nesting a second stack breaks back-button behavior and swipe-to-go-back gestures. Embed the `MyAccountAuthMethodsView` component into your stack instead. -```swift +```swift wrap lines NavigationStack(path: $path) { List { NavigationLink("Authentication methods", value: "auth-methods") @@ -109,14 +114,14 @@ There are two requirements when using embedded mode: * Add the `\.hostNavigationPath` modifier to the outer `NavigationStack` so the SDK knows which path binding to push onto. -The SDK also exposes a `Router` helper class for applications that want a type-safe navigation controller for their own routes. +The SDK also exposes a `Router` helper class for applications that want a type-safe navigation controller for their own routes. It is not required to drive the SDK's internal navigation. Only use it if you want to apply the same pattern to your application's screens. ## Localization -Universal Components for iOS do not ship localized strings. User-facing copy is in English. +Universal Components for iOS do not ship localized strings. User-facing copy is in English. If localization is a blocker for your integration, please submit a feature request in the [ui-components-ios](https://github.com/auth0/ui-components-ios/issues) repository. diff --git a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx index 6e51f902ab..8d0fefcaf0 100644 --- a/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/ios/components/factors/passkeys.mdx @@ -4,9 +4,14 @@ description: Learn about the SDK-specific behavior, application-side entitlement sidebarTitle: Passkeys --- - -Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + The [`MyAccountAuthMethodsView`](/docs/get-started/universal-components/ios/components/auth-methods-management) component can render the Auth0 [passkey](/docs/authenticate/database-connections/passkeys) enrollment flow. @@ -22,11 +27,11 @@ Unlike other factors, passkeys require application-side platform entitlements th To enable passkey support in the Universal Components for iOS SDK: -* **Configure a custom domain on your Auth0 tenant**. Native passkeys require a [custom domain](/docs/customize/custom-domains), which serves the [Apple App Site Association (AASA)](https://developer.apple.com/documentation/xcode/supporting-associated-domains) file that binds passkey credentials to your application. +* **Configure a custom domain on your Auth0 tenant**. Passkeys require a [custom domain](/docs/customize/custom-domains), which serves the [Apple App Site Association (AASA)](https://developer.apple.com/documentation/xcode/supporting-associated-domains) file that binds passkey credentials to your application. -* **Enable passkeys on your Auth0 database connection**. To learn how to enable passkeys in your Auth0 tenant, read [Configure Passkey Policy](/docs/authenticate/database-connections/passkeys/configure-passkey-policy). +* **Enable passkeys on your Auth0 database connection**. To learn how to enable passkeys in your Auth0 tenant, read [Configure Passkeys](/docs/authenticate/database-connections/passkeys/configure-passkey-policy#configure-passkeys). -* **Register your Apple Team ID and Bundle ID in your Auth0 application**. In the [Auth0 Dashboard](https://manage.auth0.com/#/applications), open your application and go to **Settings → Advanced Settings → Device Settings**, then complete the **iOS** section. Enable the **Passkey** grant type under the **Grant Types** tab. Auth0 uses these values to publish the AASA file at your custom domain. To learn more, read [Native Passkeys for Mobile Applications](/docs/authenticate/database-connections/passkeys/native-passkeys-for-mobile-applications#configure-auth0-dashboard). +* **Register your Apple Team ID and Bundle ID in your Auth0 application**. To learn more, read [Native Passkeys for Mobile Applications](/docs/authenticate/database-connections/passkeys/native-passkeys-for-mobile-applications#configure-auth0-dashboard). * **Install and configure Universal Components for iOS**. To install Universal Components, configure your Auth0 tenant, and initialize the SDK, read [Build a Self-Service Account Security Interface](/docs/get-started/universal-components/ios/components/my-account-overview). @@ -50,7 +55,11 @@ After registering your Apple Team ID and Bundle ID in your Auth0 application's D 5. Confirm that **Signing & Capabilities → Team** matches the Apple Team ID you registered in your Auth0 application's Device Settings, and that the target's **Bundle Identifier** matches the registered Bundle ID exactly. iOS performs a case-sensitive byte-for-byte match — for example, `com.example.OAuth2` is not the same as `com.example.oauth2`. -**During development**, Apple's CDN can cache stale AASA files for hours after you change Device Settings. To fetch the AASA directly from your tenant during development, append `?mode=developer` to the entitlement (for example, `webcredentials:YOUR_AUTH0_DOMAIN?mode=developer`) and enable **Settings → Developer → Associated Domains Development** on the device. Test on a physical device — the iOS Simulator does not reliably honor associated-domain configuration. Remove the `?mode=developer` suffix before shipping a release build. +**During development**, Apple's CDN can cache stale AASA files for hours after you change Device Settings. + +To fetch the AASA directly from your tenant during development, append `?mode=developer` to the entitlement (for example, `webcredentials:YOUR_AUTH0_DOMAIN?mode=developer`) and enable **Settings → Developer → Associated Domains Development** on the device. + +Test on a physical device, the iOS Simulator does not reliably honor associated-domain configuration. Remove the `?mode=developer` suffix before shipping a release build. ## SDK limitations diff --git a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx index bd5065c0d1..b5826aa7d4 100644 --- a/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx +++ b/main/docs/get-started/universal-components/ios/components/my-account-overview.mdx @@ -4,13 +4,15 @@ description: "Describes how to use Universal Components to build self-service ac sidebarTitle: Build Account Security UI --- - -Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + - -The My Account API currently enforces low rate limits, especially on free-tier tenants. This may cause errors while using these components. - Auth0 Universal Components for iOS allow you to build a self-service account security UI within your [native iOS application](/docs/get-started/auth0-overview/create-applications#create-application-in-auth0). @@ -18,7 +20,11 @@ With the `MyAccountAuthMethodsView` component, users can manage their own authen ## How it works -The `MyAccountAuthMethodsView` component uses Auth0 My Account API's [authentication methods](/docs/manage-users/my-account-api#manage-authentication-methods) to render an authentication methods management UI inside your application. +The `MyAccountAuthMethodsView` component uses Auth0 [My Account API's authentication methods](/docs/manage-users/my-account-api#manage-authentication-methods) to render an authentication methods management UI inside your application. + + +The My Account API currently enforces low rate limits, especially on free-tier tenants. This may cause errors while using these components. + When an authenticated user opens their account settings screen, the [Auth0.swift](https://github.com/auth0/Auth0.swift) SDK retrieves an [access token](/docs/secure/tokens/access-tokens) scoped to the My Account API audience. @@ -48,7 +54,12 @@ The `MyAccountAuthMethodsView` component uses the access token to call the My Ac https://YOUR_AUTH0_DOMAIN/ios/YOUR_BUNDLE_ID/callback, YOUR_BUNDLE_ID://YOUR_AUTH0_DOMAIN/ios/YOUR_BUNDLE_ID/callback ``` -5. Repeat the same for your **Allowed Logout URLs**. +5. Add the same URls for the **Allowed Logout URLs**. + + ```text + https://YOUR_AUTH0_DOMAIN/ios/YOUR_BUNDLE_ID/callback, YOUR_BUNDLE_ID://YOUR_AUTH0_DOMAIN/ios/YOUR_BUNDLE_ID/callback + ``` + 6. Select the **API Access** tab. 7. Select **Edit** for the **Auth0 My Account API** to add the **User-delegated Access** permissions: @@ -60,7 +71,7 @@ The `MyAccountAuthMethodsView` component uses the access token to call the My Ac 8. Select **Save** to save the permissions. -* The user's access token only includes permissions that were granted during login. +* The user's access token only includes permissions that were granted during login. * Request all four scopes to allow users to enroll, review, and remove authentication methods. @@ -73,11 +84,11 @@ To learn more about installation details and requirements, read [Auth0 Universal ### Initialize the SDK -To initialize the SDK, call the `Auth0UniversalComponentsSDKInitializer.initialize(...)` method once at application start, typically in your application struct's `init`. +To initialize the SDK, call the `Auth0UniversalComponentsSDKInitializer.initialize(...)` method once at application start, typically in your application struct's `init`. If your application already uses `Auth0.plist` to configure Auth0.swift, add `ClientId`, `Domain`, and `Audience` keys and call: -```swift App.swift +```swift App.swift wrap lines import SwiftUI import Auth0 import Auth0UniversalComponents @@ -98,7 +109,7 @@ struct MyApp: App { Or pass the values directly in code: -```swift App.swift +```swift App.swift wrap lines Auth0UniversalComponentsSDKInitializer.initialize( domain: "YOUR_AUTH0_DOMAIN", clientId: "YOUR_CLIENT_ID", @@ -117,7 +128,7 @@ Auth0 recommends using the Auth0.swift's `CredentialsManager` for production int To manage credentials outside the Auth0.iOS SDK's `CredentialsManager`, implement the interface directly: -```swift +```swift wrap lines struct AppTokenProvider: TokenProvider { func fetchCredentials() async throws -> Credentials { // Return the user's login credentials. diff --git a/main/docs/get-started/universal-components/ios/ios-overview.mdx b/main/docs/get-started/universal-components/ios/ios-overview.mdx index f1b2ba2786..cbcf518973 100644 --- a/main/docs/get-started/universal-components/ios/ios-overview.mdx +++ b/main/docs/get-started/universal-components/ios/ios-overview.mdx @@ -4,9 +4,14 @@ description: Learn how to install and configure Auth0 Universal Components for i sidebarTitle: Install and Configure Universal Components --- - -Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + The Auth0 [Universal Components for iOS](https://github.com/auth0/ui-components-ios) SDK provides pre-built, embeddable UI for Auth0 identity flows using [SwiftUI](https://developer.apple.com/swiftui). @@ -17,8 +22,8 @@ Universal Components for iOS are built on top of the [Auth0 Swift SDK](https://g To configure the Universal Components for iOS SDK, you need: -* Operating systems: `iOS 16.0+` -* Programming language: `Swift 5+` (6 preferred), `Xcode 16+` (26+ preferred) +* Operating systems: **iOS 16.0+** +* Programming language: **Swift 5+** (6 preferred), **Xcode 16+** (26+ preferred) To enable Auth0 [passkey](/docs/authenticate/database-connections/passkeys) support, you need **iOS 16.6+**. @@ -63,7 +68,7 @@ If you use the [Carthage](https://github.com/Carthage/Carthage) dependency manag To verify the Universal Components for iOS SDK installation, import the `Auth0UniversalComponents` module in a Swift file to confirm that the framework resolves: -```swift +```swift wrap lines import Auth0UniversalComponents ``` @@ -71,7 +76,7 @@ import Auth0UniversalComponents You can review the Universal Components for iOS sample application [`AppUIComponents`](https://github.com/auth0/ui-components-ios/tree/main/AppUIComponents) on GitHub. -Inside the sample application, `AppUIComponentsApp.swift` serves as the main SwiftUI entry point for SDK initialization, while `ThemeManager.swift` handles custom theme injection and runtime switching. +The sample application includes `AppUIComponentsApp.swift` that serves as the main SwiftUI entry point for SDK initialization and `ThemeManager.swift` that handles custom theme injection and runtime switching. ## Next steps diff --git a/main/docs/get-started/universal-components/ios/ios-theming.mdx b/main/docs/get-started/universal-components/ios/ios-theming.mdx index f9f70946dd..96a52a513d 100644 --- a/main/docs/get-started/universal-components/ios/ios-theming.mdx +++ b/main/docs/get-started/universal-components/ios/ios-theming.mdx @@ -4,9 +4,14 @@ description: Learn how to customize style and themes for Universal Components on sidebarTitle: Customize Style and Themes --- - -Auth0 Universal Components is currently in Beta. This SDK may change before the stable release. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + Auth0 [Universal Components for iOS](https://github.com/auth0/ui-components-ios) use a design token model. Visual properties such as colors, typography, spacing, corner radii, and component sizes are each expressed as a token that you can override without changes to your layouts. @@ -20,7 +25,7 @@ Universal Components for iOS use a SwiftUI `@Environment` property wrapper theme If you do not configure a theme, Universal Components for iOS render the Auth0 default theme. The following example displays the `MyAccountAuthMethodsView` component without any customization: -```swift +```swift wrap lines import SwiftUI import Auth0UniversalComponents @@ -41,7 +46,7 @@ You can override specific tokens while Universal Components for iOS render every The following example overrides only the primary background and text colors: -```swift +```swift wrap lines import SwiftUI import Auth0UniversalComponents @@ -64,7 +69,7 @@ The same applies to typography, spacing, radius, and size tokens. The following example overrides typography and button radius: -```swift +```swift wrap lines Auth0Theme( typography: DefaultAuth0TypographyTokens( body: Auth0TextStyle( @@ -86,7 +91,7 @@ Auth0Theme( Provide your own branding theme that implements the three color category properties, then wire them into an `Auth0ColorTokens` container: -```swift +```swift wrap lines struct BrandBackground: Auth0BackgroundColorTokens { var primary: Color { Color("Background/Primary", bundle: .main) } var primarySubtle: Color { Color("Background/Primary", bundle: .main).opacity(0.35) } @@ -115,7 +120,7 @@ MyAccountAuthMethodsView() Access the `@Environment(\.auth0Theme)` property wrapper to apply the same tokens in any Swift view: -```swift +```swift wrap lines struct MyCustomStep: View { @Environment(\.auth0Theme) private var theme diff --git a/main/docs/get-started/universal-components/universal-components-overview.mdx b/main/docs/get-started/universal-components/universal-components-overview.mdx index 3b6d567ed4..314a1c6440 100644 --- a/main/docs/get-started/universal-components/universal-components-overview.mdx +++ b/main/docs/get-started/universal-components/universal-components-overview.mdx @@ -8,7 +8,7 @@ sidebarTitle: Auth0 Universal Components Auth0 Universal Components are currently being released in stages. **Web components (My Organization)** are in Early Access. **iOS and Android components (My Account)** are in Beta. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). -Auth0 Universal Components is a library of pre-built UI components you can leverage to build your identity pipeline and experience inside your web and native applications. Built on [Auth0 SDKs](/docs/libraries) with an API-first approach, Universal Components allows you to embed Auth0's services, such as Organization management and MFA enrollment, without building the UI manually or managing high-privilege backend proxies. +Auth0 Universal Components is a library of pre-built UI components you can use to build your identity pipeline and experience inside your web and native applications. Built on [Auth0 SDKs](/docs/libraries) with an API-first approach, Universal Components allow you to embed Auth0's services, such as Organization management and MFA enrollment, without building the UI manually or managing high-privilege backend proxies. With Universal Components, you can: diff --git a/main/docs/get-started/universal-components/web/auth0-component-provider.mdx b/main/docs/get-started/universal-components/web/auth0-component-provider.mdx index 8169ab3a08..6a6b57bd3e 100644 --- a/main/docs/get-started/universal-components/web/auth0-component-provider.mdx +++ b/main/docs/get-started/universal-components/web/auth0-component-provider.mdx @@ -1,6 +1,6 @@ --- title: Configure Auth0ComponentProvider -description: Learn how Auth0ComponentProvider syncronizes authentication, internationalization, theming, toast notifications, and caching options. +description: Learn how Auth0ComponentProvider synchronizes authentication, internationalization, theming, toast notifications, and caching options. sidebarTitle: Configure Auth0ComponentProvider --- @@ -140,7 +140,7 @@ Use the following properties to align the Universal Components with your applica Yes - - Current language code (e.g., "en", "es", "fr") + Current language code (for example, "en", "es", "fr") @@ -344,7 +344,7 @@ Toast settings support two provider types: **Sonner** (default) or **custom**. E All custom methods are optional. Only implement the ones you need. Methods - receive the message text only - your implementation handles styling, + receive the message text only—your implementation handles styling, positioning, and timing. @@ -505,7 +505,7 @@ Fine-tune TanStack Query caching for every Auth0 component. Defaults keep data f domain string Yes - Auth0 tenant domain (e.g., "your-tenant.auth0.com"). Required for proxy mode. + Auth0 tenant domain (for example, "your-tenant.auth0.com"). Required for proxy mode. mode @@ -609,7 +609,7 @@ Fine-tune TanStack Query caching for every Auth0 component. Defaults keep data f Yes - URL to your authentication proxy server (e.g., "/api/auth"). API calls + URL to your authentication proxy server (for example, "/api/auth"). API calls append to this base path. @@ -645,7 +645,7 @@ Fine-tune TanStack Query caching for every Auth0 component. Defaults keep data f Yes - - Current language code (e.g., "en", "es", "fr") + Current language code (for example, "en", "es", "fr") @@ -846,7 +846,7 @@ Fine-tune TanStack Query caching for every Auth0 component. Defaults keep data f ``` -All custom methods are optional. Only implement the ones you need. Methods receive the message text only - your implementation handles styling, positioning, and timing. +All custom methods are optional. Only implement the ones you need. Methods receive the message text only—your implementation handles styling, positioning, and timing.
@@ -1007,13 +1007,13 @@ All custom methods are optional. Only implement the ones you need. Methods recei domain string Yes - Auth0 tenant domain (e.g., "your-tenant.auth0.com"). + Auth0 tenant domain (for example, "your-tenant.auth0.com"). authContext ContextInterface No - Custom authentication context for SPAs not using `@auth0/auth0-react`. Provides auth functions, such as`getAccessTokenSilently`. + Custom authentication context for SPAs not using `@auth0/auth0-react`. Provides auth functions, such as `getAccessTokenSilently`. previewMode @@ -1083,7 +1083,7 @@ All custom methods are optional. Only implement the ones you need. Methods recei Yes - - Current language code (e.g., "en", "es", "fr") + Current language code (for example, "en", "es", "fr") @@ -1287,7 +1287,7 @@ All custom methods are optional. Only implement the ones you need. Methods recei All custom methods are optional. Only implement the ones you need. Methods - receive the message text only - your implementation handles styling, + receive the message text only—your implementation handles styling, positioning, and timing. diff --git a/main/docs/get-started/universal-components/web/components/build-delegated-admin.mdx b/main/docs/get-started/universal-components/web/components/build-delegated-admin.mdx index 1e16561654..6ed842a62b 100644 --- a/main/docs/get-started/universal-components/web/components/build-delegated-admin.mdx +++ b/main/docs/get-started/universal-components/web/components/build-delegated-admin.mdx @@ -4,11 +4,18 @@ description: Describes how to use Universal Components to build delegated admini sidebarTitle: Build a Delegated Admin Interface --- -Universal Components allows you to build a self-service administrative dashboard within your own application. This enables your B2B customers delegated as administrators to your [Auth0 Organization](/docs/manage-users/organizations) to manage their own branding, identity providers, and verified domains without the need to access Auth0 Dashboard or require a support team for basic administrative actions. + + Auth0 Universal Components is currently in Early Access. By using it, you + agree to the applicable Free Trial terms in [Okta's Master Subscription + Agreement](https://www.okta.com/agreements/). To learn more, read [Product + Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). + + +Universal Components allow you to build a self-service administrative dashboard within your own application. This enables your B2B customers delegated as administrators to your [Auth0 Organization](/docs/manage-users/organizations) to manage their own branding, identity providers, and verified domains without the need to access Auth0 Dashboard or require a support team for basic administrative actions. ## How it works -Universal Components leverages the [My Organization API](/docs/api/myorganization), which operates on user-scoped tokens, to create a [Self-Service SSO Administrative Dashboard](/docs/authenticate/enterprise-connections/self-service-enterprise-configuration). When an administrator logs into your dashboard embedded in your application, the Auth0 SDK retrieves an Access Token containing Organization-specific scopes for admin privileges. The components use this token to call the API as the logged-in user, ensuring delegated administrators can only modify the specific Auth0 Organization to which they belong. +Universal Components use the [My Organization API](/docs/api/myorganization), which operates on user-scoped tokens, to create a [Self-Service SSO Administrative Dashboard](/docs/authenticate/enterprise-connections/self-service-enterprise-configuration). When an administrator logs into your dashboard embedded in your application, the Auth0 SDK retrieves an access token containing Organization-specific scopes for admin privileges. The components use this token to call the API as the logged-in user, ensuring delegated administrators can only modify the specific Auth0 Organization to which they belong. ### Available components @@ -30,11 +37,11 @@ Before using any My Organization components, you need to configure your Auth0 te - **Auth0 Dashboard Configuration** - Complete all steps below before using My + **Auth0 Dashboard Configuration**—Complete all steps below before using My Organization components. - ## **Create Application** +## Create the application This example uses a Single Page Application (SPA). For server-side rendered React frameworks, refer to the Next.js tab. @@ -43,45 +50,45 @@ Before using any My Organization components, you need to configure your Auth0 te 1. Navigate to [**Auth0 Dashboard > Applications > Applications**](https://manage.auth0.com/#/applications). Select **Create Application**. 2. Choose **Single Page Web Applications**. 3. In the **Settings** tab, add `http://localhost:5173` to the following fields: -
A. Allowed Callback URLs -
B. Allowed Logout URLs + - Allowed Callback URLs + - Allowed Logout URLs 4. Under **Login Experience**, select: -
A. Business users. -
B. (Optional) Prompt for Organization. + - Business users. + - (Optional) Prompt for Organization. - ## **Enable the My Organization API** +## Enable the My Organization API 1. Navigate to [**Dashboard > Applications > APIs**](https://manage.auth0.com/#/applications). 2. Select **[My Organization API](/docs/api/myorganization)** and ensure it is enabled for your tenant. - ## **Configure Application Access** +## Configure application access 1. Navigate to the **Application Access** tab. 2. Select **Edit** for your Application you want to use. 3. Configure the following settings: -
A. [Connection Profile](/docs/authenticate/enterprise-connections/connection-profile#connection-profile): Select or create a profile with connection attribute mappings. -
B. [User Attribute Profile](/docs/authenticate/enterprise-connections/user-attribute-profile#user-attribute-profile): Select or create a profile with user attribute mappings. -
C. Supported [Identity Providers](/docs/authenticate/identity-providers): Enable providers your customers can use. -
D. Connection Deletion Behavior: Choose **Allow** or **Allow if Empty**. -
    • **Allow**: Users can delete connections, which deletes all users from that connection. -
    • **Allow if Empty**: Users can only delete connections with no users. -
E. User Access Authorization: Choose **Unauthorized**, **Authorized**, or **All**. -
    • **Unauthorized**: No permissions allowed. -
    • **Authorized**: Select specific permissions. -
    • **All**: Include all existing and future permissions. -
F. Client Credential Access Authorization: Choose **Unauthorized**, **Authorized**, or **All**. + - [Connection Profile](/docs/authenticate/enterprise-connections/connection-profile#connection-profile): Select or create a profile with connection attribute mappings. + - [User Attribute Profile](/docs/authenticate/enterprise-connections/user-attribute-profile#user-attribute-profile): Select or create a profile with user attribute mappings. + - Supported [Identity Providers](/docs/authenticate/identity-providers): Enable providers your customers can use. + - Connection Deletion Behavior: Choose **Allow** or **Allow if Empty**. + - **Allow**: Users can delete connections, which deletes all users from that connection. + - **Allow if Empty**: Users can only delete connections with no users. + - User Access Authorization: Choose **Unauthorized**, **Authorized**, or **All**. + - **Unauthorized**: No permissions allowed. + - **Authorized**: Select specific permissions. + - **All**: Include all existing and future permissions. + - Client Credential Access Authorization: Choose **Unauthorized**, **Authorized**, or **All**. 4. Select **Save**. - ## **Setup Database & User** +## Set up the database and user 1. Navigate to [**Auth0 Dashboard > Authentication > Database**](https://manage.auth0.com/#/connections/database) to create a database connection. 2. Select the **Applications** tab of the connection, enable your new SPA application. 3. Create a test user in this database for initial testing. - ## **Setup Role** +## Set up the role - 1. Create a role (e.g., "Organization Admin"). + 1. Create a role (for example, "Organization Admin"). 2. Add the required scopes from the My Organization API to the role. @@ -113,18 +120,18 @@ Before using any My Organization components, you need to configure your Auth0 te The user's token will only include permissions that exist in both their assigned role and the User Access Authorization settings configured in the previous step.
- ## **Create Organization** +## Create an Organization 1. Navigate to [**Organizations > Create Organization**](https://manage.auth0.com/#/organizations). 2. Configure the Auth0 Organization: -
A. In **Members**: Add your test user and assign the "Organization Admin" role. -
B. In **Connections**: Enable your database connection. + - In **Members**: Add your test user and assign the "Organization Admin" role. + - In **Connections**: Enable your database connection. -## **Configure Environment Variables** +## Configure environment variables 1. Create a `.env` file in the root of your React project: -```bash +```bash wrap lines VITE_AUTH0_DOMAIN=your-domain.auth0.com VITE_AUTH0_CLIENT_ID=your-spa-client-id ``` @@ -141,10 +148,10 @@ User must be authenticated and a member of the Auth0 Organization. Components au - **Auth0 Dashboard Configuration** - Complete all steps below before using My Organization components. + **Auth0 Dashboard Configuration**—Complete all steps below before using My Organization components. -## **Create Application** +## Create the application This example uses a Regular Web Application for Next.js. You can also configure a Single Page Application following similar steps. @@ -153,45 +160,45 @@ User must be authenticated and a member of the Auth0 Organization. Components au 1. Navigate to [**Auth0 Dashboard > Applications > Applications**](https://manage.auth0.com/#/applications). Select **Create Application**. 2. Choose **Regular Web Application**. 3. In the **Settings** tab, add `http://localhost:5173` to the following fields: -
A. Allowed Callback URLs -
B. Allowed Logout URLs + - Allowed Callback URLs + - Allowed Logout URLs 4. Under **Login Experience**, select: -
A. Business users. -
B. (Optional) Prompt for Organization. + - Business users. + - (Optional) Prompt for Organization. -## **Enable the My Organization API** +## Enable the My Organization API 1. Navigate to [**Dashboard > Applications > APIs**](https://manage.auth0.com/#/applications). 2. Select **[My Organization API](/docs/api/myorganization)** and ensure it is enabled for your tenant. - ## **Configure Application Access** +## Configure application access 1. Navigate to the **Application Access** tab. 2. Select **Edit** for your Application you want to use. 3. Configure the following settings: -
A. [Connection Profile](/docs/authenticate/enterprise-connections/connection-profile#connection-profile): Select or create a profile with connection attribute mappings. -
B. [User Attribute Profile](/docs/authenticate/enterprise-connections/user-attribute-profile#user-attribute-profile): Select or create a profile with user attribute mappings. -
C. Supported [Identity Providers](/docs/authenticate/identity-providers): Enable providers your customers can use. -
D. Connection Deletion Behavior: Choose **Allow** or **Allow if Empty**. -
    • **Allow**: Users can delete connections, which deletes all users from that connection. -
    • **Allow if Empty**: Users can only delete connections with no users. -
E. User Access Authorization: Choose **Unauthorized**, **Authorized**, or **All**. -
    • **Unauthorized**: No permissions allowed. -
    • **Authorized**: Select specific permissions. -
    • **All**: Include all existing and future permissions. -
F. Client Credential Access Authorization: Choose **Unauthorized**, **Authorized**, or **All**. + - [Connection Profile](/docs/authenticate/enterprise-connections/connection-profile#connection-profile): Select or create a profile with connection attribute mappings. + - [User Attribute Profile](/docs/authenticate/enterprise-connections/user-attribute-profile#user-attribute-profile): Select or create a profile with user attribute mappings. + - Supported [Identity Providers](/docs/authenticate/identity-providers): Enable providers your customers can use. + - Connection Deletion Behavior: Choose **Allow** or **Allow if Empty**. + - **Allow**: Users can delete connections, which deletes all users from that connection. + - **Allow if Empty**: Users can only delete connections with no users. + - User Access Authorization: Choose **Unauthorized**, **Authorized**, or **All**. + - **Unauthorized**: No permissions allowed. + - **Authorized**: Select specific permissions. + - **All**: Include all existing and future permissions. + - Client Credential Access Authorization: Choose **Unauthorized**, **Authorized**, or **All**. 4. Select **Save**. - ## **Setup Database & User** +## Set up the database and user 1. Navigate to [**Auth0 Dashboard > Authentication > Database**](https://manage.auth0.com/#/connections/database) to create a database connection. 2. Select the **Applications** tab of the connection, enable your new SPA application. 3. Create a test user in this database for initial testing. - ## **Setup Role** +## Set up the role - 1. Create a role (e.g., "Organization Admin"). + 1. Create a role (for example, "Organization Admin"). 2. Add the required scopes from the My Organization API to the role. @@ -223,18 +230,18 @@ User must be authenticated and a member of the Auth0 Organization. Components au The user's token will only include permissions that exist in both their assigned role and the User Access Authorization settings configured in the previous step.
- ## **Create Organization** +## Create an Organization 1. Navigate to [**Organizations > Create Organization**](https://manage.auth0.com/#/organizations). 2. Configure the Auth0 Organization: -
A. In **Members**: Add your test user and assign the "Organization Admin" role. -
B. In **Connections**: Enable your database connection. + - In **Members**: Add your test user and assign the "Organization Admin" role. + - In **Connections**: Enable your database connection. -## **Configure Environment Variables** +## Configure environment variables 1. Create a `.env` file in the root of your React project: -```bash +```bash wrap lines NEXT_PUBLIC_AUTH0_DOMAIN=your-domain.auth0.com NEXT_PUBLIC_AUTH0_CLIENT_ID=your-client-id AUTH0_SECRET=your-secret @@ -256,10 +263,10 @@ User must be authenticated and a member of the Auth0 Organization. Components au - **Auth0 Dashboard Configuration** - Complete all steps below before using My Organization components. + **Auth0 Dashboard Configuration**—Complete all steps below before using My Organization components. -## **Create Application** +## Create the application This example uses a Single Page Application, but you can also configure a Regular Web Application (RWA) following similar steps. @@ -268,46 +275,46 @@ User must be authenticated and a member of the Auth0 Organization. Components au 1. Navigate to [**Auth0 Dashboard > Applications > Applications**](https://manage.auth0.com/#/applications). Select **Create Application**. 2. Choose **Single Page Web Applications**. 3. In the **Settings** tab, add `http://localhost:5173` to the following fields: -
A. Allowed Callback URLs -
B. Allowed Logout URLs + - Allowed Callback URLs + - Allowed Logout URLs 4. Under **Login Experience**, select: -
A. Business users. -
B. (Optional) Prompt for Organization. + - Business users. + - (Optional) Prompt for Organization. -## **Enable the My Organization API** +## Enable the My Organization API 1. Navigate to [**Dashboard > Applications > APIs**](https://manage.auth0.com/#/applications). 2. Select **[My Organization API](/docs/api/myorganization)** and ensure it is enabled for your tenant. - ## **Configure Application Access** +## Configure application access 1. Navigate to the **Application Access** tab. 2. Select **Edit** for your Application you want to use. 3. Configure the following settings: -
A. [Connection Profile](/docs/authenticate/enterprise-connections/connection-profile#connection-profile): Select or create a profile with connection attribute mappings. -
B. [User Attribute Profile](/docs/authenticate/enterprise-connections/user-attribute-profile#user-attribute-profile): Select or create a profile with user attribute mappings. -
C. Supported [Identity Providers](/docs/authenticate/identity-providers): Enable providers your customers can use. -
D. Connection Deletion Behavior: Choose **Allow** or **Allow if Empty**. -
    • **Allow**: Users can delete connections, which deletes all users from that connection. -
    • **Allow if Empty**: Users can only delete connections with no users. -
E. User Access Authorization: Choose **Unauthorized**, **Authorized**, or **All**. -
    • **Unauthorized**: No permissions allowed. -
    • **Authorized**: Select specific permissions. -
    • **All**: Include all existing and future permissions. -
F. Client Credential Access Authorization: Choose **Unauthorized**, **Authorized**, or **All**. + - [Connection Profile](/docs/authenticate/enterprise-connections/connection-profile#connection-profile): Select or create a profile with connection attribute mappings. + - [User Attribute Profile](/docs/authenticate/enterprise-connections/user-attribute-profile#user-attribute-profile): Select or create a profile with user attribute mappings. + - Supported [Identity Providers](/docs/authenticate/identity-providers): Enable providers your customers can use. + - Connection Deletion Behavior: Choose **Allow** or **Allow if Empty**. + - **Allow**: Users can delete connections, which deletes all users from that connection. + - **Allow if Empty**: Users can only delete connections with no users. + - User Access Authorization: Choose **Unauthorized**, **Authorized**, or **All**. + - **Unauthorized**: No permissions allowed. + - **Authorized**: Select specific permissions. + - **All**: Include all existing and future permissions. + - Client Credential Access Authorization: Choose **Unauthorized**, **Authorized**, or **All**. 4. Select **Save**. - ## **Setup Database & User** +## Set up the database and user 1. Navigate to [**Auth0 Dashboard > Authentication > Database**](https://manage.auth0.com/#/connections/database) to create a database connection. 2. Select the **Applications** tab of the connection, enable your new SPA application. 3. Create a test user in this database for initial testing. - ## **Setup Role** +## Set up the role - 1. Create a role (e.g., "Organization Admin"). + 1. Create a role (for example, "Organization Admin"). 2. Add the required scopes from the My Organization API to the role. @@ -339,14 +346,14 @@ User must be authenticated and a member of the Auth0 Organization. Components au The user's token will only include permissions that exist in both their assigned role and the User Access Authorization settings configured in the previous step.
- ## **Create Organization** +## Create an Organization 1. Navigate to [**Organizations > Create Organization**](https://manage.auth0.com/#/organizations). 2. Configure the Auth0 Organization: -
A. In **Members**: Add your test user and assign the "Organization Admin" role. -
B. In **Connections**: Enable your database connection. + - In **Members**: Add your test user and assign the "Organization Admin" role. + - In **Connections**: Enable your database connection. -## **Configure Environment Variables** +## Configure environment variables @@ -355,7 +362,7 @@ Environment variable configurations vary by framework and setup. Check the `exam Create a `.env` file in the root of your React project: -```bash +```bash wrap lines VITE_AUTH0_DOMAIN=your-domain.auth0.com VITE_AUTH0_CLIENT_ID=your-spa-client-id ``` diff --git a/main/docs/get-started/universal-components/web/components/configure-org-domains.mdx b/main/docs/get-started/universal-components/web/components/configure-org-domains.mdx index d3760d22c5..3775cf114f 100644 --- a/main/docs/get-started/universal-components/web/components/configure-org-domains.mdx +++ b/main/docs/get-started/universal-components/web/components/configure-org-domains.mdx @@ -7,7 +7,14 @@ description: Learn how to manage verified and pending Organization domains in a import Spinner from "/snippets/Spinner.jsx"; import { ComponentLoader } from "/snippets/ComponentLoader.jsx"; -The `DomainTable` component provides a unified interface for your customers to manage their Auth0 Organization's email domain. By verifying domain ownership, Organization administrators enable critical B2B features like [Home Realm Discovery (HRD)](/docs/authenticate/enterprise-connections/self-service-enterprise-configuration/manage-self-service-enterprise-configuration#email-domain-verification-and-pre-verified-domains) and ensure users are automatically routed to the correct SSO provider based on their email suffix (e.g., `user@acme.com`). + + Auth0 Universal Components is currently in Early Access. By using it, you + agree to the applicable Free Trial terms in [Okta's Master Subscription + Agreement](https://www.okta.com/agreements/). To learn more, read [Product + Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). + + +The `DomainTable` component provides a unified interface for your customers to manage their Auth0 Organization's email domain. By verifying domain ownership, Organization administrators enable critical B2B features like [Home Realm Discovery (HRD)](/docs/authenticate/enterprise-connections/self-service-enterprise-configuration/manage-self-service-enterprise-configuration#email-domain-verification-and-pre-verified-domains) and ensure users are automatically routed to the correct SSO provider based on their email suffix (for example, `user@acme.com`). - **Auth0 Configuration Required** - Ensure your tenant is configured with the + **Auth0 Configuration Required**—Ensure your tenant is configured with the My Organization API. [View setup guide →](/docs/get-started/universal-components/web/components/build-delegated-admin#enable-the-my-organization-api) @@ -28,11 +35,11 @@ The `DomainTable` component provides a unified interface for your customers to m ## Install the component -```bash pnpm +```bash pnpm wrap lines pnpm add @auth0/universal-components-react ``` -```bash npm +```bash npm wrap lines npm install @auth0/universal-components-react ``` @@ -45,7 +52,7 @@ npm install @auth0/universal-components-react ## Get started -```tsx React SPA +```tsx React SPA wrap lines import { DomainTable } from "@auth0/universal-components-react"; export function DomainsPage() { @@ -54,7 +61,7 @@ export function DomainsPage() { ``` -```tsx +```tsx wrap lines import React from "react"; import { DomainTable } from "@auth0/universal-components-react"; import { Auth0Provider } from "@auth0/auth0-react"; @@ -181,13 +188,13 @@ Controls the domain creation flow. Use `onAfter` to track when new domains are a **Properties:** -- `disabled` - Disable the "Add Domain" button -- `onBefore(domain)` - Runs before the domain is created. Return `false` to prevent creation (e.g., if the domain format is invalid). -- `onAfter(domain)` - Runs after the domain is successfully created. Use this to show a notification or track the event. +- `disabled`—Disable the "Add Domain" button +- `onBefore(domain)`—Runs before the domain is created. Return `false` to prevent creation (for example, if the domain format is invalid). +- `onAfter(domain)`—Runs after the domain is successfully created. Use this to show a notification or track the event. **Example:** -```tsx +```tsx wrap lines { @@ -216,13 +223,13 @@ Controls the domain verification flow. Domain verification proves ownership via **Properties:** -- `disabled` - Disable the verify button -- `onBefore(domain)` - Runs before the verification attempt. Return `false` to prevent verification (e.g., to confirm DNS is configured). -- `onAfter(domain)` - Runs after the domain is successfully verified. Use this to show a success notification. +- `disabled`—Disable the verify button +- `onBefore(domain)`—Runs before the verification attempt. Return `false` to prevent verification (for example, to confirm DNS is configured). +- `onAfter(domain)`—Runs after the domain is successfully verified. Use this to show a success notification. **Example:** -```tsx +```tsx wrap lines { @@ -248,13 +255,13 @@ Controls domain deletion. Recommended to use `onBefore` for confirmation since t **Properties:** -- `disabled` - Disable the delete button -- `onBefore(domain)` - Runs before the deletion. Return `false` to prevent deletion (recommended for confirmation dialogs). -- `onAfter(domain)` - Runs after the domain is successfully deleted. Use this to track the event or show a notification. +- `disabled`—Disable the delete button +- `onBefore(domain)`—Runs before the deletion. Return `false` to prevent deletion (recommended for confirmation dialogs). +- `onAfter(domain)`—Runs after the domain is successfully deleted. Use this to track the event or show a notification. **Example:** -```tsx +```tsx wrap lines { @@ -278,13 +285,13 @@ Controls associating a verified domain with an SSO provider. Only verified domai **Properties:** -- `disabled` - Disable the associate action -- `onBefore(domain, provider)` - Runs before the association. Return `false` to prevent the association. -- `onAfter(domain, provider)` - Runs after the domain is successfully associated with the provider. +- `disabled`—Disable the associate action +- `onBefore(domain, provider)`—Runs before the association. Return `false` to prevent the association. +- `onAfter(domain, provider)`—Runs after the domain is successfully associated with the provider. **Example:** -```tsx +```tsx wrap lines { @@ -305,9 +312,9 @@ Controls removing a domain's association with an SSO provider. **Properties:** -- `disabled` - Disable the disassociate action -- `onBefore(domain, provider)` - Runs before the removal. Return `false` to prevent the removal. -- `onAfter(domain, provider)` - Runs after the domain is successfully removed from the provider. +- `disabled`—Disable the disassociate action +- `onBefore(domain, provider)`—Runs before the removal. Return `false` to prevent the removal. +- `onAfter(domain, provider)`—Runs after the domain is successfully removed from the provider. --- @@ -318,12 +325,12 @@ Controls removing a domain's association with an SSO provider. Navigation handlers for the domain configuration modal. When users configure a domain's provider associations: -- `onOpenProvider` - Called when user clicks on an existing provider to view/edit it -- `onCreateProvider` - Called when user clicks to create a new provider +- `onOpenProvider`—Called when user clicks on an existing provider to view/edit it +- `onCreateProvider`—Called when user clicks to create a new provider **Example:** -```tsx +```tsx wrap lines { navigate(`/providers/${provider.id}`); @@ -352,11 +359,11 @@ Customization props let you adapt the component to your brand, locale, and valid Set custom validation rules for domain URL input. - **create.domainUrl** - Domain URL validation - `regex` - Custom regex pattern - - `errorMessage` - Custom error message + **create.domainUrl**—Domain URL validation—`regex`—Custom regex pattern + - `errorMessage`—Custom error message -```tsx +```tsx wrap lines - **header** - Component header + **header**—Component header - `title`, `description`, `create_button_text` -**table** - Table display +**table**—Table display - `empty_message` - `columns.domain`, `columns.status` - `actions.configure_button_text`, `actions.verify_button_text`, `actions.delete_button_text` -**create.modal** - Create domain modal +**create.modal**—Create domain modal - `title` - `field.label`, `field.placeholder`, `field.error` - `actions.cancel_button_text`, `actions.create_button_text` -**verify.modal** - Verify domain modal +**verify.modal**—Verify domain modal - `title` - `txt_record_name.label`, `txt_record_content.label`, `verification_status.label` - `actions.verify_button_text`, `actions.done_button_text` -**delete.modal** - Delete confirmation +**delete.modal**—Delete confirmation - `title` - `description.pending`, `description.verified` - `actions.cancel_button_text`, `actions.create_button_text` -**configure.modal** - Provider configuration +**configure.modal**—Provider configuration - `title`, `description` - `table.empty_message`, `table.columns.name` - `actions.close_button_text` -**notifications** - API responses +**notifications**—API responses - `domain_create_success`, `domain_create_error` - `domain_verify_success`, `domain_delete_success` -```tsx +```tsx wrap lines - **Variables** - CSS custom properties - - `common` - Applied to all themes - - `light` - Light theme only - - `dark` - Dark theme only + **Variables**—CSS custom properties + - `common`—Applied to all themes + - `light`—Light theme only + - `dark`—Dark theme only -**Classes** - Component class overrides +**Classes**—Component class overrides - `DomainTable-header` - `DomainTable-table` @@ -460,7 +467,7 @@ Customize appearance with CSS variables and class overrides. Supports theme-awar
-```tsx +```tsx wrap lines - **Auth0 Configuration Required** - Ensure your tenant is configured with the + **Auth0 Configuration Required**—Ensure your tenant is configured with the My Organization API. [View setup guide →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) @@ -518,11 +525,11 @@ These hooks provide the underlying logic without any UI. Use them to build compl ## Install component -```bash npm +```bash npm wrap lines npm install @auth0/universal-components-react ``` -```bash pnpm +```bash pnpm wrap lines pnpm add @auth0/universal-components-react ``` @@ -535,7 +542,7 @@ pnpm add @auth0/universal-components-react ## Get started -```tsx page.tsx +```tsx page.tsx wrap lines import { DomainTable } from "@auth0/universal-components-react"; import { useRouter } from "next/navigation"; @@ -556,7 +563,7 @@ export function DomainsPage() { ``` -```tsx +```tsx wrap lines import React from "react"; import { DomainTable } from "@auth0/universal-components-react"; import { useRouter } from "next/navigation"; @@ -669,7 +676,7 @@ Display props control how the component renders without affecting its behavior. --- -### Action Props +### Action props Action props handle user interactions and define what happens when users perform domain operations. Use lifecycle hooks (`onBefore`, `onAfter`) to integrate with your application's routing and analytics. @@ -771,13 +778,13 @@ Controls the domain creation flow. Use `onAfter` to track when new domains are a **Properties:** -- `disabled` - Disable the "Add Domain" button -- `onBefore(domain)` - Runs before the domain is created. Return `false` to prevent creation (e.g., if the domain format is invalid). -- `onAfter(domain)` - Runs after the domain is successfully created. Use this to show a notification or track the event. +- `disabled`—Disable the "Add Domain" button +- `onBefore(domain)`—Runs before the domain is created. Return `false` to prevent creation (for example, if the domain format is invalid). +- `onAfter(domain)`—Runs after the domain is successfully created. Use this to show a notification or track the event. **Example:** -```tsx +```tsx wrap lines { @@ -806,13 +813,13 @@ Controls the domain verification flow. Domain verification proves ownership via **Properties:** -- `disabled` - Disable the verify button -- `onBefore(domain)` - Runs before the verification attempt. Return `false` to prevent verification (e.g., to confirm DNS is configured). -- `onAfter(domain)` - Runs after the domain is successfully verified. Use this to show a success notification. +- `disabled`—Disable the verify button +- `onBefore(domain)`—Runs before the verification attempt. Return `false` to prevent verification (for example, to confirm DNS is configured). +- `onAfter(domain)`—Runs after the domain is successfully verified. Use this to show a success notification. **Example:** -```tsx +```tsx wrap lines { @@ -838,13 +845,13 @@ Controls domain deletion. Recommended to use `onBefore` for confirmation since t **Properties:** -- `disabled` - Disable the delete button -- `onBefore(domain)` - Runs before the deletion. Return `false` to prevent deletion (recommended for confirmation dialogs). -- `onAfter(domain)` - Runs after the domain is successfully deleted. Use this to track the event or show a notification. +- `disabled`—Disable the delete button +- `onBefore(domain)`—Runs before the deletion. Return `false` to prevent deletion (recommended for confirmation dialogs). +- `onAfter(domain)`—Runs after the domain is successfully deleted. Use this to track the event or show a notification. **Example:** -```tsx +```tsx wrap lines { @@ -868,13 +875,13 @@ Controls associating a verified domain with an SSO provider. Only verified domai **Properties:** -- `disabled` - Disable the associate action -- `onBefore(domain, provider)` - Runs before the association. Return `false` to prevent the association. -- `onAfter(domain, provider)` - Runs after the domain is successfully associated with the provider. +- `disabled`—Disable the associate action +- `onBefore(domain, provider)`—Runs before the association. Return `false` to prevent the association. +- `onAfter(domain, provider)`—Runs after the domain is successfully associated with the provider. **Example:** -```tsx +```tsx wrap lines { @@ -895,9 +902,9 @@ Controls removing a domain's association with an SSO provider. **Properties:** -- `disabled` - Disable the disassociate action -- `onBefore(domain, provider)` - Runs before the removal. Return `false` to prevent the removal. -- `onAfter(domain, provider)` - Runs after the domain is successfully removed from the provider. +- `disabled`—Disable the disassociate action +- `onBefore(domain, provider)`—Runs before the removal. Return `false` to prevent the removal. +- `onAfter(domain, provider)`—Runs after the domain is successfully removed from the provider. --- @@ -908,12 +915,12 @@ Controls removing a domain's association with an SSO provider. Navigation handlers for the domain configuration modal. When users configure a domain's provider associations: -- `onOpenProvider` - Called when user clicks on an existing provider to view/edit it -- `onCreateProvider` - Called when user clicks to create a new provider +- `onOpenProvider`—Called when user clicks on an existing provider to view/edit it +- `onCreateProvider`—Called when user clicks to create a new provider **Example:** -```tsx +```tsx wrap lines { router.push(`/providers/${provider.id}`); @@ -926,7 +933,7 @@ Navigation handlers for the domain configuration modal. When users configure a d --- -### Customization Props +### Customization props Customization props let you adapt the component to your brand, locale, and validation requirements without modifying source code. @@ -981,11 +988,11 @@ Customization props let you adapt the component to your brand, locale, and valid Set custom validation rules for domain URL input. - **create.domain** - Domain URL validation - `regex` - Custom regex pattern - - `errorMessage` - Custom error message + **create.domain**—Domain URL validation—`regex`—Custom regex pattern - + `errorMessage`—Custom error message -```tsx +```tsx wrap lines - **header** - Component header + **header**—Component header - `title`, `description`, `create_button_text` -**table** - Table display +**table**—Table display - `empty_message` - `columns.domain`, `columns.status` - `actions.configure_button_text`, `actions.verify_button_text`, `actions.delete_button_text` -**create.modal** - Create domain modal +**create.modal**—Create domain modal - `title` - `field.label`, `field.placeholder`, `field.error` - `actions.cancel_button_text`, `actions.create_button_text` -**verify.modal** - Verify domain modal +**verify.modal**—Verify domain modal - `title` - `txt_record_name.label`, `txt_record_content.label`, `verification_status.label` - `actions.verify_button_text`, `actions.done_button_text` -**delete.modal** - Delete confirmation +**delete.modal**—Delete confirmation - `title` - `description.pending`, `description.verified` - `actions.cancel_button_text`, `actions.create_button_text` -**configure.modal** - Provider configuration +**configure.modal**—Provider configuration - `title`, `description` - `table.empty_message`, `table.columns.name` - `actions.close_button_text` -**notifications** - API responses +**notifications**—API responses - `domain_create_success`, `domain_create_error` - `domain_verify_success`, `domain_delete_success` -```tsx +```tsx wrap lines - **Variables** - CSS custom properties - - `common` - Applied to all themes - - `light` - Light theme only - - `dark` - Dark theme only + **Variables**—CSS custom properties + - `common`—Applied to all themes + - `light`—Light theme only + - `dark`—Dark theme only -**Classes** - Component class overrides +**Classes**—Component class overrides - `DomainTable-header` - `DomainTable-table` @@ -1089,7 +1096,7 @@ Customize appearance with CSS variables and class overrides. Supports theme-awar -```tsx +```tsx wrap lines - **Auth0 Configuration Required** - Ensure your tenant is configured with the + **Auth0 Configuration Required**—Ensure your tenant is configured with the My Organization API. [View setup guide →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) ## Install the component -```bash +```bash wrap lines npx shadcn@latest add https://auth0-universal-components.vercel.app/r/my-organization/domain-table.json ``` @@ -1206,9 +1213,9 @@ npx shadcn@latest add https://auth0-universal-components.vercel.app/r/my-organiz dependency for shared utilities and Auth0 integration. -## Getting Started +## Get started -```tsx +```tsx wrap lines import { DomainTable } from "@/components/auth0/my-organization/domain-table"; export function DomainsPage() { @@ -1217,7 +1224,7 @@ export function DomainsPage() { ``` -```tsx +```tsx wrap lines import React from "react"; import { DomainTable } from "@/components/auth0/my-organization/domain-table"; import { Auth0Provider } from "@auth0/auth0-react"; @@ -1350,7 +1357,7 @@ Display props control how the component renders without affecting its behavior. --- -### Action Props +### Action props Action props handle user interactions and define what happens when users perform domain operations. Use lifecycle hooks (`onBefore`, `onAfter`) to integrate with your application's routing and analytics. @@ -1452,13 +1459,13 @@ Controls the domain creation flow. Use `onAfter` to track when new domains are a **Properties:** -- `disabled` - Disable the "Add Domain" button -- `onBefore(domain)` - Runs before the domain is created. Return `false` to prevent creation (e.g., if the domain format is invalid). -- `onAfter(domain)` - Runs after the domain is successfully created. Use this to show a notification or track the event. +- `disabled`—Disable the "Add Domain" button +- `onBefore(domain)`—Runs before the domain is created. Return `false` to prevent creation (for example, if the domain format is invalid). +- `onAfter(domain)`—Runs after the domain is successfully created. Use this to show a notification or track the event. **Example:** -```tsx +```tsx wrap lines { @@ -1487,13 +1494,13 @@ Controls the domain verification flow. Domain verification proves ownership via **Properties:** -- `disabled` - Disable the verify button -- `onBefore(domain)` - Runs before the verification attempt. Return `false` to prevent verification (e.g., to confirm DNS is configured). -- `onAfter(domain)` - Runs after the domain is successfully verified. Use this to show a success notification. +- `disabled`—Disable the verify button +- `onBefore(domain)`—Runs before the verification attempt. Return `false` to prevent verification (for example, to confirm DNS is configured). +- `onAfter(domain)`—Runs after the domain is successfully verified. Use this to show a success notification. **Example:** -```tsx +```tsx wrap lines { @@ -1519,13 +1526,13 @@ Controls domain deletion. Recommended to use `onBefore` for confirmation since t **Properties:** -- `disabled` - Disable the delete button -- `onBefore(domain)` - Runs before the deletion. Return `false` to prevent deletion (recommended for confirmation dialogs). -- `onAfter(domain)` - Runs after the domain is successfully deleted. Use this to track the event or show a notification. +- `disabled`—Disable the delete button +- `onBefore(domain)`—Runs before the deletion. Return `false` to prevent deletion (recommended for confirmation dialogs). +- `onAfter(domain)`—Runs after the domain is successfully deleted. Use this to track the event or show a notification. **Example:** -```tsx +```tsx wrap lines { @@ -1549,13 +1556,13 @@ Controls associating a verified domain with an SSO provider. Only verified domai **Properties:** -- `disabled` - Disable the associate action -- `onBefore(domain, provider)` - Runs before the association. Return `false` to prevent the association. -- `onAfter(domain, provider)` - Runs after the domain is successfully associated with the provider. +- `disabled`—Disable the associate action +- `onBefore(domain, provider)`—Runs before the association. Return `false` to prevent the association. +- `onAfter(domain, provider)`—Runs after the domain is successfully associated with the provider. **Example:** -```tsx +```tsx wrap lines { @@ -1576,9 +1583,9 @@ Controls removing a domain's association with an SSO provider. **Properties:** -- `disabled` - Disable the disassociate action -- `onBefore(domain, provider)` - Runs before the removal. Return `false` to prevent the removal. -- `onAfter(domain, provider)` - Runs after the domain is successfully removed from the provider. +- `disabled`—Disable the disassociate action +- `onBefore(domain, provider)`—Runs before the removal. Return `false` to prevent the removal. +- `onAfter(domain, provider)`—Runs after the domain is successfully removed from the provider. --- @@ -1589,12 +1596,12 @@ Controls removing a domain's association with an SSO provider. Navigation handlers for the domain configuration modal. When users configure a domain's provider associations: -- `onOpenProvider` - Called when user clicks on an existing provider to view/edit it -- `onCreateProvider` - Called when user clicks to create a new provider +- `onOpenProvider`—Called when user clicks on an existing provider to view/edit it +- `onCreateProvider`—Called when user clicks to create a new provider **Example:** -```tsx +```tsx wrap lines { navigate(`/providers/${provider.id}`); @@ -1607,7 +1614,7 @@ Navigation handlers for the domain configuration modal. When users configure a d --- -### Customization Props +### Customization props Customization props let you adapt the component to your brand, locale, and validation requirements without modifying source code. @@ -1662,11 +1669,11 @@ Customization props let you adapt the component to your brand, locale, and valid Set custom validation rules for domain URL input. - **create.domainUrl** - Domain URL validation - `regex` - Custom regex pattern - - `errorMessage` - Custom error message + **create.domainUrl**—Domain URL validation—`regex`—Custom regex pattern + - `errorMessage`—Custom error message -```tsx +```tsx wrap lines - **header** - Component header + **header**—Component header - `title`, `description`, `create_button_text` -**table** - Table display +**table**—Table display - `empty_message` - `columns.domain`, `columns.status` - `actions.configure_button_text`, `actions.verify_button_text`, `actions.delete_button_text` -**create.modal** - Create domain modal +**create.modal**—Create domain modal - `title` - `field.label`, `field.placeholder`, `field.error` - `actions.cancel_button_text`, `actions.create_button_text` -**verify.modal** - Verify domain modal +**verify.modal**—Verify domain modal - `title` - `txt_record_name.label`, `txt_record_content.label`, `verification_status.label` - `actions.verify_button_text`, `actions.done_button_text` -**delete.modal** - Delete confirmation +**delete.modal**—Delete confirmation - `title` - `description.pending`, `description.verified` - `actions.cancel_button_text`, `actions.create_button_text` -**configure.modal** - Provider configuration +**configure.modal**—Provider configuration - `title`, `description` - `table.empty_message`, `table.columns.name` - `actions.close_button_text` -**notifications** - API responses +**notifications**—API responses - `domain_create_success`, `domain_create_error` - `domain_verify_success`, `domain_delete_success` -```tsx +```tsx wrap lines - **Variables** - CSS custom properties - - `common` - Applied to all themes - - `light` - Light theme only - - `dark` - Dark theme only + **Variables**—CSS custom properties + - `common`—Applied to all themes + - `light`—Light theme only + - `dark`—Dark theme only -**Classes** - Component class overrides +**Classes**—Component class overrides - `DomainTable-header` - `DomainTable-table` @@ -1770,7 +1777,7 @@ Customize appearance with CSS variables and class overrides. Supports theme-awar -```tsx +```tsx wrap lines + Auth0 Universal Components is currently in Early Access. By using it, you + agree to the applicable Free Trial terms in [Okta's Master Subscription + Agreement](https://www.okta.com/agreements/). To learn more, read [Product + Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). + + The `OrganizationDetailsEdit` component provides a unified interface to edit your [organization](/docs/manage-users/organizations) details. -## Setup Requirements +## Setup requirements - **Auth0 Configuration Required** - Ensure your tenant is configured with the + **Auth0 Configuration Required**—Ensure your tenant is configured with the My Organization API. [View setup guide →](/docs/get-started/universal-components/web/components/build-delegated-admin#enable-the-my-organization-api) @@ -28,11 +35,11 @@ The `OrganizationDetailsEdit` component provides a unified interface to edit you ## Installation -```bash pnpm +```bash pnpm wrap lines pnpm add @auth0/universal-components-react ``` -```bash npm +```bash npm wrap lines npm install @auth0/universal-components-react ``` @@ -43,9 +50,9 @@ npm install @auth0/universal-components-react dependency for shared utilities and Auth0 integration. -## Getting Started +## Get started -```tsx +```tsx wrap lines import { OrganizationDetailsEdit } from "@auth0/universal-components-react"; import { useNavigate } from "react-router-dom"; @@ -66,7 +73,7 @@ export function OrganizationSettingsPage() { ``` -```tsx +```tsx wrap lines import React from "react"; import { OrganizationDetailsEdit } from "@auth0/universal-components-react"; import { Auth0Provider } from "@auth0/auth0-react"; @@ -162,13 +169,13 @@ export default function App() { ## Props -### Required Props +### Required props -Required props are fundamental to the component's operation. `OrganizationDetailsEdit` has no required props - it automatically loads the current organization's details from the My Organization API. +Required props are fundamental to the component's operation. `OrganizationDetailsEdit` has no required props—it automatically loads the current organization's details from the My Organization API. --- -### Display Props +### Display props Display props control how the component renders without affecting its behavior. Use these to hide sections or enable read-only mode. @@ -208,7 +215,7 @@ Display props control how the component renders without affecting its behavior. --- -### Action Props +### Action props Action props handle user interactions and define what happens when users save or cancel changes. Use lifecycle hooks (`onBefore`, `onAfter`) to integrate with your application's routing and analytics. @@ -266,13 +273,13 @@ Controls the save flow when users submit organization changes. Use `onAfter` to **Properties:** -- `disabled` - Disable the save button (e.g., while another operation is in progress) -- `onBefore(data)` - Runs before the save operation. Return `false` to prevent saving (e.g., to show a confirmation dialog first). -- `onAfter(data)` - Runs after the organization is successfully saved. Use this to navigate away or track the event. +- `disabled`—Disable the save button (for example, while another operation is in progress) +- `onBefore(data)`—Runs before the save operation. Return `false` to prevent saving (for example, to show a confirmation dialog first). +- `onAfter(data)`—Runs after the organization is successfully saved. Use this to navigate away or track the event. **Example:** -```tsx +```tsx wrap lines // Navigate back after saving saveAction={{ onAfter: () => navigate("/organization"), @@ -309,13 +316,13 @@ Controls the cancel/discard flow. Use this action to manage discarded changes. **Properties:** -- `disabled` - Disable the cancel button -- `onBefore(data)` - Runs before the cancel action. Return `false` to prevent cancellation (e.g., to confirm discarding unsaved changes). -- `onAfter(data)` - Runs after the cancel is confirmed. Use this to navigate away from the form. +- `disabled`—Disable the cancel button +- `onBefore(data)`—Runs before the cancel action. Return `false` to prevent cancellation (for example, to confirm discarding unsaved changes). +- `onAfter(data)`—Runs after the cancel is confirmed. Use this to navigate away from the form. **Example:** -```tsx +```tsx wrap lines { @@ -337,12 +344,12 @@ Configures the back button in the component header. Use this to navigate back to **Properties:** -- `icon` - Custom Lucide icon component (optional, defaults to ArrowLeft) -- `onClick` - Click handler for navigation +- `icon`—Custom Lucide icon component (optional, defaults to ArrowLeft) +- `onClick`—Click handler for navigation **Example:** -```tsx +```tsx wrap lines import { ChevronLeft } from "lucide-react"; All schema fields support: `regex`, `errorMessage`, `minLength`, `maxLength`, `required` -**details.name** - Organization internal name -**details.displayName** - Organization display name -**details.color** - Brand color (hex format) -**details.logoURL** - Logo URL +**details.name**—Organization internal name +**details.displayName**—Organization display name +**details.color**—Brand color (hex format) +**details.logoURL**—Logo URL -```tsx +```tsx wrap lines - **header** - Component header + **header**—Component header - `title`, `description`, `back_button_text` -**form** - Form fields +**form**—Form fields -- `fields.name` - `label`, `placeholder`, `helper_text`, `error` -- `fields.display_name` - `label`, `placeholder`, `helper_text`, `error` -- `fields.color` - `label`, `placeholder`, `helper_text`, `error` -- `fields.logo_url` - `label`, `placeholder`, `helper_text`, `error` +- `fields.name`—`label`, `placeholder`, `helper_text`, `error` +- `fields.display_name`—`label`, `placeholder`, `helper_text`, `error` +- `fields.color`—`label`, `placeholder`, `helper_text`, `error` +- `fields.logo_url`—`label`, `placeholder`, `helper_text`, `error` -**actions** - Button labels +**actions**—Button labels - `save_button_text`, `cancel_button_text` -**notifications** - API responses +**notifications**—API responses - `save_success`, `save_error`, `general_error` -```tsx +```tsx wrap lines - **Variables** - CSS custom properties - - `common` - Applied to all themes - - `light` - Light theme only - - `dark` - Dark theme only + **Variables**—CSS custom properties + - `common`—Applied to all themes + - `light`—Light theme only + - `dark`—Dark theme only -**Classes** - Component class overrides +**Classes**—Component class overrides - `OrganizationDetailsEdit-header` - `OrganizationDetailsEdit-form` @@ -521,7 +528,7 @@ Customize appearance with CSS variables and class overrides. Supports theme-awar -```tsx +```tsx wrap lines -### Available Hooks +### Available hooks These hooks provide the underlying logic without any UI. Use them to build completely custom interfaces while leveraging the Auth0 API integration. @@ -603,10 +610,10 @@ These hooks provide the underlying logic without any UI. Use them to build compl -## Setup Requirements +## Setup requirements - **Auth0 Configuration Required** - Ensure your tenant is configured with the + **Auth0 Configuration Required**—Ensure your tenant is configured with the My Organization API. [View setup guide →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) @@ -614,11 +621,11 @@ These hooks provide the underlying logic without any UI. Use them to build compl ## Installation -```bash npm (Recommended) +```bash npm (Recommended) wrap lines npm install @auth0/universal-components-react ``` -```bash pnpm +```bash pnpm wrap lines pnpm add @auth0/universal-components-react ``` @@ -629,9 +636,9 @@ pnpm add @auth0/universal-components-react dependency for shared utilities and Auth0 integration. -## Getting Started +## Get started -```tsx page.tsx +```tsx page.tsx wrap lines import { OrganizationDetailsEdit } from "@auth0/universal-components-react"; import { useRouter } from "next/navigation"; @@ -652,7 +659,7 @@ export function OrganizationSettingsPage() { ``` -```tsx +```tsx wrap lines import React from "react"; import { OrganizationDetailsEdit } from "@auth0/universal-components-react"; import { useRouter } from "next/navigation"; @@ -727,13 +734,13 @@ export default OrganizationSettingsPage; ## Props -### Core Props +### Core props -Core props are fundamental to the component's operation. `OrganizationDetailsEdit` has no required props - it automatically loads the current organization's details from the My Organization API. +Core props are fundamental to the component's operation. `OrganizationDetailsEdit` has no required props—it automatically loads the current organization's details from the My Organization API. --- -### Display Props +### Display props Display props control how the component renders without affecting its behavior. Use these to hide sections or enable read-only mode. @@ -773,7 +780,7 @@ Display props control how the component renders without affecting its behavior. --- -### Action Props +### Action props Action props handle user interactions and define what happens when users save or cancel changes. Use lifecycle hooks (`onBefore`, `onAfter`) to integrate with your application's routing and analytics. @@ -831,13 +838,13 @@ Controls the save flow when users submit organization changes. Use `onAfter` to **Properties:** -- `disabled` - Disable the save button (e.g., while another operation is in progress) -- `onBefore(data)` - Runs before the save operation. Return `false` to prevent saving (e.g., to show a confirmation dialog first). -- `onAfter(data)` - Runs after the organization is successfully saved. Use this to navigate away or track the event. +- `disabled`—Disable the save button (for example, while another operation is in progress) +- `onBefore(data)`—Runs before the save operation. Return `false` to prevent saving (for example, to show a confirmation dialog first). +- `onAfter(data)`—Runs after the organization is successfully saved. Use this to navigate away or track the event. **Common Patterns:** -```tsx +```tsx wrap lines // Navigate back after saving saveAction={{ onAfter: () => router.push("/organization"), @@ -874,13 +881,13 @@ Controls the cancel/discard flow. Use this action to manage discarded changes. **Properties:** -- `disabled` - Disable the cancel button -- `onBefore(data)` - Runs before the cancel action. Return `false` to prevent cancellation (e.g., to confirm discarding unsaved changes). -- `onAfter(data)` - Runs after the cancel is confirmed. Use this to navigate away from the form. +- `disabled`—Disable the cancel button +- `onBefore(data)`—Runs before the cancel action. Return `false` to prevent cancellation (for example, to confirm discarding unsaved changes). +- `onAfter(data)`—Runs after the cancel is confirmed. Use this to navigate away from the form. **Example:** -```tsx +```tsx wrap lines { @@ -902,12 +909,12 @@ Configures the back button in the component header. Use this to navigate back to **Properties:** -- `icon` - Custom Lucide icon component (optional, defaults to ArrowLeft) -- `onClick` - Click handler for navigation +- `icon`—Custom Lucide icon component (optional, defaults to ArrowLeft) +- `onClick`—Click handler for navigation **Example:** -```tsx +```tsx wrap lines import { ChevronLeft } from "lucide-react"; All schema fields support: `regex`, `errorMessage`, `minLength`, `maxLength`, `required` -**details.name** - Organization internal name -**details.displayName** - Organization display name -**details.color** - Brand color (hex format) -**details.logoURL** - Logo URL +**details.name**—Organization internal name +**details.displayName**—Organization display name +**details.color**—Brand color (hex format) +**details.logoURL**—Logo URL -```tsx +```tsx wrap lines - **header** - Component header + **header**—Component header - `title`, `description`, `back_button_text` -**form** - Form fields +**form**—Form fields -- `fields.name` - `label`, `placeholder`, `helper_text`, `error` -- `fields.display_name` - `label`, `placeholder`, `helper_text`, `error` -- `fields.color` - `label`, `placeholder`, `helper_text`, `error` -- `fields.logo_url` - `label`, `placeholder`, `helper_text`, `error` +- `fields.name`—`label`, `placeholder`, `helper_text`, `error` +- `fields.display_name`—`label`, `placeholder`, `helper_text`, `error` +- `fields.color`—`label`, `placeholder`, `helper_text`, `error` +- `fields.logo_url`—`label`, `placeholder`, `helper_text`, `error` -**actions** - Button labels +**actions**—Button labels - `save_button_text`, `cancel_button_text` -**notifications** - API responses +**notifications**—API responses - `save_success`, `save_error`, `general_error` -```tsx +```tsx wrap lines - **Variables** - CSS custom properties - - `common` - Applied to all themes - - `light` - Light theme only - - `dark` - Dark theme only + **Variables**—CSS custom properties + - `common`—Applied to all themes + - `light`—Light theme only + - `dark`—Dark theme only -**Classes** - Component class overrides +**Classes**—Component class overrides - `OrganizationDetailsEdit-header` - `OrganizationDetailsEdit-form` @@ -1086,7 +1093,7 @@ Customize appearance with CSS variables and class overrides. Supports theme-awar -```tsx +```tsx wrap lines -### Available Hooks +### Available hooks These hooks provide the underlying logic without any UI. Use them to build completely custom interfaces while leveraging the Auth0 API integration. @@ -1169,17 +1176,17 @@ These hooks provide the underlying logic without any UI. Use them to build compl -## Setup Requirements +## Setup requirements - **Auth0 Configuration Required** - Ensure your tenant is configured with the + **Auth0 Configuration Required**—Ensure your tenant is configured with the My Organization API. [View setup guide →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) ## Installation -```bash +```bash wrap lines npx shadcn@latest add https://auth0-universal-components.vercel.app/r/my-organization/organization-details-edit.json ``` @@ -1188,9 +1195,9 @@ npx shadcn@latest add https://auth0-universal-components.vercel.app/r/my-organiz dependency for shared utilities and Auth0 integration. -## Getting Started +## Get started -```tsx +```tsx wrap lines import { OrganizationDetailsEdit } from "@/components/auth0/my-organization/organization-details-edit"; export function OrganizationSettingsPage() { @@ -1210,7 +1217,7 @@ export function OrganizationSettingsPage() { ``` -```tsx +```tsx wrap lines import React from "react"; import { OrganizationDetailsEdit } from "@/components/auth0/my-organization/organization-details-edit"; import { Auth0Provider } from "@auth0/auth0-react"; @@ -1306,13 +1313,13 @@ export default function App() { ## Props -### Core Props +### Core props -Core props are fundamental to the component's operation. `OrganizationDetailsEdit` has no required props - it automatically loads the current organization's details from the My Organization API. +Core props are fundamental to the component's operation. `OrganizationDetailsEdit` has no required props—it automatically loads the current organization's details from the My Organization API. --- -### Display Props +### Display props Display props control how the component renders without affecting its behavior. Use these to hide sections or enable read-only mode. @@ -1352,7 +1359,7 @@ Display props control how the component renders without affecting its behavior. --- -### Action Props +### Action props Action props handle user interactions and define what happens when users save or cancel changes. Use lifecycle hooks (`onBefore`, `onAfter`) to integrate with your application's routing and analytics. @@ -1410,13 +1417,13 @@ Controls the save flow when users submit organization changes. Use `onAfter` to **Properties:** -- `disabled` - Disable the save button (e.g., while another operation is in progress) -- `onBefore(data)` - Runs before the save operation. Return `false` to prevent saving (e.g., to show a confirmation dialog first). -- `onAfter(data)` - Runs after the organization is successfully saved. Use this to navigate away or track the event. +- `disabled`—Disable the save button (for example, while another operation is in progress) +- `onBefore(data)`—Runs before the save operation. Return `false` to prevent saving (for example, to show a confirmation dialog first). +- `onAfter(data)`—Runs after the organization is successfully saved. Use this to navigate away or track the event. **Common Patterns:** -```tsx +```tsx wrap lines // Navigate back after saving saveAction={{ onAfter: () => navigate("/organization"), @@ -1453,13 +1460,13 @@ Controls the cancel/discard flow. Use this action to manage discarded changes. **Properties:** -- `disabled` - Disable the cancel button -- `onBefore(data)` - Runs before the cancel action. Return `false` to prevent cancellation (e.g., to confirm discarding unsaved changes). -- `onAfter(data)` - Runs after the cancel is confirmed. Use this to navigate away from the form. +- `disabled`—Disable the cancel button +- `onBefore(data)`—Runs before the cancel action. Return `false` to prevent cancellation (for example, to confirm discarding unsaved changes). +- `onAfter(data)`—Runs after the cancel is confirmed. Use this to navigate away from the form. **Example:** -```tsx +```tsx wrap lines { @@ -1481,12 +1488,12 @@ Configures the back button in the component header. Use this to navigate back to **Properties:** -- `icon` - Custom Lucide icon component (optional, defaults to ArrowLeft) -- `onClick` - Click handler for navigation +- `icon`—Custom Lucide icon component (optional, defaults to ArrowLeft) +- `onClick`—Click handler for navigation **Example:** -```tsx +```tsx wrap lines import { ChevronLeft } from "lucide-react"; All schema fields support: `regex`, `errorMessage`, `minLength`, `maxLength`, `required` -**details.name** - Organization internal name -**details.displayName** - Organization display name -**details.color** - Brand color (hex format) -**details.logoURL** - Logo URL +**details.name**—Organization internal name +**details.displayName**—Organization display name +**details.color**—Brand color (hex format) +**details.logoURL**—Logo URL -```tsx +```tsx wrap lines - **header** - Component header + **header**—Component header - `title`, `description`, `back_button_text` -**form** - Form fields +**form**—Form fields -- `fields.name` - `label`, `placeholder`, `helper_text`, `error` -- `fields.display_name` - `label`, `placeholder`, `helper_text`, `error` -- `fields.color` - `label`, `placeholder`, `helper_text`, `error` -- `fields.logo_url` - `label`, `placeholder`, `helper_text`, `error` +- `fields.name`—`label`, `placeholder`, `helper_text`, `error` +- `fields.display_name`—`label`, `placeholder`, `helper_text`, `error` +- `fields.color`—`label`, `placeholder`, `helper_text`, `error` +- `fields.logo_url`—`label`, `placeholder`, `helper_text`, `error` -**actions** - Button labels +**actions**—Button labels - `save_button_text`, `cancel_button_text` -**notifications** - API responses +**notifications**—API responses - `save_success`, `save_error`, `general_error` -```tsx +```tsx wrap lines - **Variables** - CSS custom properties - - `common` - Applied to all themes - - `light` - Light theme only - - `dark` - Dark theme only + **Variables**—CSS custom properties + - `common`—Applied to all themes + - `light`—Light theme only + - `dark`—Dark theme only -**Classes** - Component class overrides +**Classes**—Component class overrides - `OrganizationDetailsEdit-header` - `OrganizationDetailsEdit-form` @@ -1665,7 +1672,7 @@ Customize appearance with CSS variables and class overrides. Supports theme-awar -```tsx +```tsx wrap lines -### Available Hooks +### Available hooks These hooks provide the underlying logic without any UI. Use them to build completely custom interfaces while leveraging the Auth0 API integration. diff --git a/main/docs/get-started/universal-components/web/components/sso-provider-create.mdx b/main/docs/get-started/universal-components/web/components/sso-provider-create.mdx index ffbd62af6b..28a496dc63 100644 --- a/main/docs/get-started/universal-components/web/components/sso-provider-create.mdx +++ b/main/docs/get-started/universal-components/web/components/sso-provider-create.mdx @@ -7,6 +7,13 @@ description: Multi-step wizard for creating SSO providers with provider selectio import Spinner from "/snippets/Spinner.jsx"; import { ComponentLoader } from "/snippets/ComponentLoader.jsx"; + + Auth0 Universal Components is currently in Early Access. By using it, you + agree to the applicable Free Trial terms in [Okta's Master Subscription + Agreement](https://www.okta.com/agreements/). To learn more, read [Product + Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). + + The `SsoProviderCreate` component provides a unified interface to add new [Single Sign-On](/docs/authenticate/enterprise-connections/self-service-enterprise-configuration) providers. -## Setup Requirements +## Setup requirements - **Auth0 Configuration Required** - Ensure your tenant is configured with the + **Auth0 Configuration Required**—Ensure your tenant is configured with the My Organization API. [View setup guide →](/docs/get-started/universal-components/web/components/build-delegated-admin#enable-the-my-organization-api) @@ -28,11 +35,11 @@ The `SsoProviderCreate` component provides a unified interface to add new [Singl ## Installation -```bash pnpm +```bash pnpm wrap lines pnpm add @auth0/universal-components-react ``` -```bash npm +```bash npm wrap lines npm install @auth0/universal-components-react ``` @@ -43,9 +50,9 @@ npm install @auth0/universal-components-react dependency for shared utilities and Auth0 integration. -## Getting Started +## Get started -```tsx +```tsx wrap lines import { SsoProviderCreate } from "@auth0/universal-components-react"; import { useNavigate } from "react-router-dom"; @@ -66,7 +73,7 @@ export function CreateProviderPage() { ``` -```tsx +```tsx wrap lines import React from "react"; import { SsoProviderCreate } from "@auth0/universal-components-react"; import { Auth0Provider } from "@auth0/auth0-react"; @@ -132,10 +139,10 @@ export default function App() { -## Setup Requirements +## Setup requirements - **Auth0 Configuration Required** - Ensure your tenant is configured with the + **Auth0 Configuration Required**—Ensure your tenant is configured with the My Organization API. [View setup guide →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) @@ -143,11 +150,11 @@ export default function App() { ## Installation -```bash npm (Recommended) +```bash npm (Recommended) wrap lines npm install @auth0/universal-components-react ``` -```bash pnpm +```bash pnpm wrap lines pnpm add @auth0/universal-components-react ``` @@ -158,9 +165,9 @@ pnpm add @auth0/universal-components-react dependency for shared utilities and Auth0 integration. -## Getting Started +## Get started -```tsx page.tsx +```tsx page.tsx wrap lines import { SsoProviderCreate } from "@auth0/universal-components-react"; import { useRouter } from "next/navigation"; @@ -181,7 +188,7 @@ export function CreateProviderPage() { ``` -```tsx +```tsx wrap lines import React from "react"; import { SsoProviderCreate } from "@auth0/universal-components-react"; import { useRouter } from "next/navigation"; @@ -229,17 +236,17 @@ export default CreateSsoProviderPage; -## Setup Requirements +## Setup requirements - **Auth0 Configuration Required** - Ensure your tenant is configured with the + **Auth0 Configuration Required**—Ensure your tenant is configured with the My Organization API. [View setup guide →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) ## Installation -```bash +```bash wrap lines npx shadcn@latest add https://auth0-universal-components.vercel.app/r/my-organization/sso-provider-create.json ``` @@ -248,9 +255,9 @@ npx shadcn@latest add https://auth0-universal-components.vercel.app/r/my-organiz dependency for shared utilities and Auth0 integration. -## Getting Started +## Get started -```tsx +```tsx wrap lines import { SsoProviderCreate } from "@/components/auth0/my-organization/sso-provider-create"; export function CreateProviderPage() { @@ -270,7 +277,7 @@ export function CreateProviderPage() { ``` -```tsx +```tsx wrap lines import React from "react"; import { SsoProviderCreate } from "@/components/auth0/my-organization/sso-provider-create"; import { Auth0Provider } from "@auth0/auth0-react"; @@ -337,7 +344,7 @@ export default function App() { ## Props -### Required Props +### Required props Required props are fundamental to the component's operation. For `SsoProviderCreate`, there is only one core prop which controls what happens after a provider is successfully created. @@ -373,13 +380,13 @@ The `createAction` prop is required because it controls where users are navigate **Properties:** -- `disabled` - Disable the create button (e.g., while another operation is in progress) -- `onBefore(data)` - Runs before the provider is created. Return `false` to prevent creation (e.g., to show a confirmation dialog first). -- `onAfter(data, result)` - Runs after the provider is successfully created. Use this to navigate to another page or track the event. +- `disabled`—Disable the create button (for example, while another operation is in progress) +- `onBefore(data)`—Runs before the provider is created. Return `false` to prevent creation (for example, to show a confirmation dialog first). +- `onAfter(data, result)`—Runs after the provider is successfully created. Use this to navigate to another page or track the event. **Example:** -```tsx +```tsx wrap lines // Navigate to providers list after creation createAction={{ onAfter: () => navigate("/providers/list"), @@ -401,7 +408,7 @@ createAction={{ --- -### Display Props +### Display props Display props control how the component renders without affecting its behavior. Use these to hide sections or enable read-only mode. @@ -441,7 +448,7 @@ Display props control how the component renders without affecting its behavior. --- -### Action Props +### Action props Action props handle user interactions beyond the core creation flow. These control navigation and wizard step behavior. @@ -499,12 +506,12 @@ Configures the back button in the component header. Use this to navigate back to **Properties:** -- `icon` - Custom Lucide icon component (optional, defaults to ArrowLeft) -- `onClick` - Click handler for navigation +- `icon`—Custom Lucide icon component (optional, defaults to ArrowLeft) +- `onClick`—Click handler for navigation **Example:** -```tsx +```tsx wrap lines import { ChevronLeft } from "lucide-react"; navigate("/providers") }} onNext={(stepId, values) => { @@ -550,7 +557,7 @@ Control wizard step navigation. These callbacks are called when the user clicks --- -### Customization Props +### Customization props Customization props let you adapt the component to your brand, locale, and validation requirements without modifying source code. @@ -638,7 +645,7 @@ Set custom validation rules for provider fields. Rules are organized by provider -```tsx +```tsx wrap lines - **header** - Component header + **header**—Component header - `title`, `back_button_text` -**provider_select** - Step 1 +**provider_select**—Step 1 - `title`, `description` -**provider_details** - Step 2 +**provider_details**—Step 2 - `title`, `description` -- `fields.name` - `label`, `placeholder`, `helper_text`, `error` -- `fields.display_name` - `label`, `placeholder`, `helper_text`, `error` +- `fields.name`—`label`, `placeholder`, `helper_text`, `error` +- `fields.display_name`—`label`, `placeholder`, `helper_text`, `error` -**provider_configure** - Step 3 +**provider_configure**—Step 3 - `title`, `description`, `guided_setup_button_text` -- `fields.okta` - Okta fields -- `fields.adfs` - ADFS fields -- `fields.google-apps` - Google Workspace fields -- `fields.oidc` - OIDC fields -- `fields.pingfederate` - PingFederate fields -- `fields.samlp` - SAML fields -- `fields.waad` - Azure AD fields +- `fields.okta`—Okta fields +- `fields.adfs`—ADFS fields +- `fields.google-apps`—Google Workspace fields +- `fields.oidc`—OIDC fields +- `fields.pingfederate`—PingFederate fields +- `fields.samlp`—SAML fields +- `fields.waad`—Azure AD fields -**notifications** - API responses +**notifications**—API responses - `general_error`, `provider_create_success` -```tsx +```tsx wrap lines - **Variables** - CSS custom properties - - `common` - Applied to all themes - - `light` - Light theme only - - `dark` - Dark theme only + **Variables**—CSS custom properties + - `common`—Applied to all themes + - `light`—Light theme only + - `dark`—Dark theme only -**Classes** - Component class overrides +**Classes**—Component class overrides - `SsoProviderCreate-header` - `SsoProviderCreate-wizard` @@ -741,7 +748,7 @@ Customize appearance with CSS variables and class overrides. Supports theme-awar -```tsx +```tsx wrap lines -### Available Hooks +### Available hooks These hooks provide the underlying logic without any UI. Use them to build completely custom interfaces while leveraging the Auth0 API integration. diff --git a/main/docs/get-started/universal-components/web/components/sso-provider-edit.mdx b/main/docs/get-started/universal-components/web/components/sso-provider-edit.mdx index 3363f9a93e..35a33bd393 100644 --- a/main/docs/get-started/universal-components/web/components/sso-provider-edit.mdx +++ b/main/docs/get-started/universal-components/web/components/sso-provider-edit.mdx @@ -7,6 +7,13 @@ description: "Tabbed interface for editing SSO providers: SSO settings, provisio import Spinner from "/snippets/Spinner.jsx"; import { ComponentLoader } from "/snippets/ComponentLoader.jsx"; + + Auth0 Universal Components is currently in Early Access. By using it, you + agree to the applicable Free Trial terms in [Okta's Master Subscription + Agreement](https://www.okta.com/agreements/). To learn more, read [Product + Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). + + The `SsoProviderEdit` component provides a unified interface to edit [Single Sign-On](/docs/authenticate/enterprise-connections/self-service-enterprise-configuration) providers. -## Setup Requirements +## Setup requirements - **Auth0 Configuration Required** - Ensure your tenant is configured with the + **Auth0 Configuration Required**—Ensure your tenant is configured with the My Organization API. [View setup guide →](/docs/get-started/universal-components/web/components/build-delegated-admin#enable-the-my-organization-api) @@ -28,11 +35,11 @@ The `SsoProviderEdit` component provides a unified interface to edit [Single Sig ## Installation -```bash pnpm +```bash pnpm wrap lines pnpm add @auth0/universal-components-react ``` -```bash npm +```bash npm wrap lines npm install @auth0/universal-components-react ``` @@ -43,9 +50,9 @@ npm install @auth0/universal-components-react dependency for shared utilities and Auth0 integration. -## Getting Started +## Get started -```tsx +```tsx wrap lines import { SsoProviderEdit } from "@auth0/universal-components-react"; import { useNavigate, useParams } from "react-router-dom"; @@ -70,7 +77,7 @@ export function EditProviderPage() { ``` -```tsx +```tsx wrap lines import React from "react"; import { SsoProviderEdit } from "@auth0/universal-components-react"; import { Auth0Provider } from "@auth0/auth0-react"; @@ -169,7 +176,7 @@ export default function App() { ## Props -### Required Props +### Required props Required props are fundamental to the component's operation. `SsoProviderEdit` requires the provider ID to load and edit the correct provider. @@ -198,7 +205,7 @@ Required props are fundamental to the component's operation. `SsoProviderEdit` r --- -### Display Props +### Display props Display props control how the component renders without affecting its behavior. @@ -227,7 +234,7 @@ Display props control how the component renders without affecting its behavior. --- -### Action Props +### Action props User interactions across the three tabs are handled by several action props that are organized under the respective tab's name (`sso`, `provisioning`, and `domains`). @@ -297,12 +304,12 @@ Configures the back button in the component header. Use this to navigate back to **Properties:** -- `icon` - Custom Lucide icon component (optional, defaults to ArrowLeft) -- `onClick` - Click handler for navigation +- `icon`—Custom Lucide icon component (optional, defaults to ArrowLeft) +- `onClick`—Click handler for navigation **Example:** -```tsx +```tsx wrap lines import { ChevronLeft } from "lucide-react"; { @@ -430,7 +437,7 @@ Controls removing the provider from the organization without deleting it. The pr **Example:** -```tsx +```tsx wrap lines sso={{ removeFromOrganizationAction: { onBefore: (provider) => { @@ -443,7 +450,7 @@ sso={{ --- -### Provisioning Tab Actions +### Provisioning tab actions The `provisioning` prop configures actions for the SCIM provisioning tab. This tab manages automated user provisioning via the SCIM protocol. @@ -518,7 +525,7 @@ Enables SCIM provisioning for the provider. Once enabled, you can generate a SCI **Example:** -```tsx +```tsx wrap lines provisioning={{ createAction: { onBefore: (provider) => { @@ -543,7 +550,7 @@ Disables SCIM provisioning and removes all provisioning configuration for that i **Example:** -```tsx +```tsx wrap lines provisioning={{ deleteAction: { onBefore: (provider) => { @@ -565,7 +572,7 @@ Generates a new SCIM bearer token for your identity provider to authenticate wit **Example:** -```tsx +```tsx wrap lines provisioning={{ createScimTokenAction: { onAfter: (provider, tokenResponse) => { @@ -587,7 +594,7 @@ Revokes the SCIM token. The identity provider will no longer be able to sync use **Example:** -```tsx +```tsx wrap lines provisioning={{ deleteScimTokenAction: { onBefore: () => { @@ -599,7 +606,7 @@ provisioning={{ --- -### Domains Tab Actions +### Domains tab actions The `domains` prop configures actions for the domains tab. This tab manages domains associated with the provider for automatic user routing. @@ -679,7 +686,7 @@ Controls adding new domains to the organization from within the provider edit in **Example:** -```tsx +```tsx wrap lines domains={{ createAction: { onAfter: (domain) => { @@ -700,7 +707,7 @@ Controls domain verification via DNS TXT record. **Example:** -```tsx +```tsx wrap lines domains={{ verifyAction: { onBefore: (domain) => { @@ -724,7 +731,7 @@ Controls domain deletion. **Example:** -```tsx +```tsx wrap lines domains={{ deleteAction: { onBefore: (domain) => { @@ -745,7 +752,7 @@ Associates a verified domain with this SSO provider for automatic user routing. **Example:** -```tsx +```tsx wrap lines domains={{ associateToProviderAction: { onAfter: (domain, provider) => { @@ -766,7 +773,7 @@ Removes a domain's association with this provider. --- -### Customization Props +### Customization props Customization props let you adapt the component to your brand, locale, and validation requirements without modifying source code. @@ -823,16 +830,16 @@ Set custom validation rules for provider and domain fields. All schema fields support: `regex`, `errorMessage`, `minLength`, `maxLength`, `required` -**provider.\*** - Provider configuration fields by strategy +**provider.\***—Provider configuration fields by strategy - Common: `name`, `displayName` - Strategy-specific fields (same as SsoProviderCreate) -**domains.create.domainUrl** - Domain URL validation +**domains.create.domainUrl**—Domain URL validation -```tsx +```tsx wrap lines - **header** - Component header + **header**—Component header - `title`, `back_button_text` -**tabs** - Tab labels +**tabs**—Tab labels - `sso`, `provisioning`, `domains` -**sso_tab** - SSO settings tab +**sso_tab**—SSO settings tab - `title`, `description` -- `fields.*` - Form field labels by strategy +- `fields.*`—Form field labels by strategy - `actions.save_button_text`, `actions.delete_button_text` - `delete_modal.*`, `remove_modal.*` -**provisioning_tab** - Provisioning tab +**provisioning_tab**—Provisioning tab - `title`, `description` - `scim_endpoint.label`, `scim_token.label` - `actions.enable_button_text`, `actions.disable_button_text` - `actions.generate_token_button_text`, `actions.revoke_token_button_text` -**domains_tab** - Domains tab +**domains_tab**—Domains tab - `title`, `description` - Same structure as DomainTable messages -**notifications** - API responses +**notifications**—API responses - `provider_update_success`, `provider_delete_success` - `provisioning_enable_success`, `provisioning_disable_success` @@ -897,7 +904,7 @@ Customize all text and translations. All fields are optional and use defaults if -```tsx +```tsx wrap lines - **Variables** - CSS custom properties - - `common` - Applied to all themes - - `light` - Light theme only - - `dark` - Dark theme only + **Variables**—CSS custom properties + - `common`—Applied to all themes + - `light`—Light theme only + - `dark`—Dark theme only -**Classes** - Component class overrides +**Classes**—Component class overrides - `SsoProviderEdit-header` - `SsoProviderEdit-tabs` @@ -944,7 +951,7 @@ Customize appearance with CSS variables and class overrides. Supports theme-awar -```tsx +```tsx wrap lines -### Available Hooks +### Available hooks These hooks provide the underlying logic without any UI. Use them to build completely custom interfaces while leveraging the Auth0 API integration. @@ -1051,10 +1058,10 @@ These hooks provide the underlying logic without any UI. Use them to build compl -## Setup Requirements +## Setup requirements - **Auth0 Configuration Required** - Ensure your tenant is configured with the + **Auth0 Configuration Required**—Ensure your tenant is configured with the My Organization API. [View setup guide →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) @@ -1062,11 +1069,11 @@ These hooks provide the underlying logic without any UI. Use them to build compl ## Installation -```bash npm (Recommended) +```bash npm (Recommended) wrap lines npm install @auth0/universal-components-react ``` -```bash pnpm +```bash pnpm wrap lines pnpm add @auth0/universal-components-react ``` @@ -1077,9 +1084,9 @@ pnpm add @auth0/universal-components-react dependency for shared utilities and Auth0 integration. -## Getting Started +## Get started -```tsx page.tsx +```tsx page.tsx wrap lines import { SsoProviderEdit } from "@auth0/universal-components-react"; import { useRouter } from "next/navigation"; @@ -1103,7 +1110,7 @@ export function EditProviderPage({ providerId }) { ``` -```tsx +```tsx wrap lines import React from "react"; import { SsoProviderEdit } from "@auth0/universal-components-react"; import { useRouter, useSearchParams } from "next/navigation"; @@ -1183,7 +1190,7 @@ export default EditProviderPage; ## Props -### Core Props +### Core props Core props are fundamental to the component's operation. `SsoProviderEdit` requires the provider ID to load and edit the correct provider. @@ -1212,7 +1219,7 @@ Core props are fundamental to the component's operation. `SsoProviderEdit` requi --- -### Display Props +### Display props Display props control how the component renders without affecting its behavior. @@ -1241,7 +1248,7 @@ Display props control how the component renders without affecting its behavior. --- -### Action Props +### Action props User interactions across the three tabs are handled by several action props that are organized under the respective tab's name (`sso`, `provisioning`, and `domains`). @@ -1311,12 +1318,12 @@ Configures the back button in the component header. Use this to navigate back to **Properties:** -- `icon` - Custom Lucide icon component (optional, defaults to ArrowLeft) -- `onClick` - Click handler for navigation +- `icon`—Custom Lucide icon component (optional, defaults to ArrowLeft) +- `onClick`—Click handler for navigation **Example:** -```tsx +```tsx wrap lines import { ChevronLeft } from "lucide-react"; { @@ -1444,7 +1451,7 @@ Controls removing the provider from the organization without deleting it. The pr **Example:** -```tsx +```tsx wrap lines sso={{ removeFromOrganizationAction: { onBefore: (provider) => { @@ -1457,7 +1464,7 @@ sso={{ --- -### Provisioning Tab Actions +### Provisioning tab actions The `provisioning` prop configures actions for the SCIM provisioning tab. This tab manages automated user provisioning via the SCIM protocol. @@ -1532,7 +1539,7 @@ Enables SCIM provisioning for the provider. Once enabled, you can generate a SCI **Example:** -```tsx +```tsx wrap lines provisioning={{ createAction: { onBefore: (provider) => { @@ -1557,7 +1564,7 @@ Disables SCIM provisioning and removes all provisioning configuration for that i **Example:** -```tsx +```tsx wrap lines provisioning={{ deleteAction: { onBefore: (provider) => { @@ -1579,7 +1586,7 @@ Generates a new SCIM bearer token for your identity provider to authenticate wit **Example:** -```tsx +```tsx wrap lines provisioning={{ createScimTokenAction: { onAfter: (provider, tokenResponse) => { @@ -1601,7 +1608,7 @@ Revokes the SCIM token. The identity provider will no longer be able to sync use **Example:** -```tsx +```tsx wrap lines provisioning={{ deleteScimTokenAction: { onBefore: () => { @@ -1613,7 +1620,7 @@ provisioning={{ --- -### Domains Tab Actions +### Domains tab actions The `domains` prop configures actions for the domains tab. This tab manages domains associated with the provider for automatic user routing. @@ -1693,7 +1700,7 @@ Controls adding new domains to the organization from within the provider edit in **Example:** -```tsx +```tsx wrap lines domains={{ createAction: { onAfter: (domain) => { @@ -1714,7 +1721,7 @@ Controls domain verification via DNS TXT record. **Example:** -```tsx +```tsx wrap lines domains={{ verifyAction: { onBefore: (domain) => { @@ -1738,7 +1745,7 @@ Controls domain deletion. **Example:** -```tsx +```tsx wrap lines domains={{ deleteAction: { onBefore: (domain) => { @@ -1759,7 +1766,7 @@ Associates a verified domain with this SSO provider for automatic user routing. **Example:** -```tsx +```tsx wrap lines domains{{ associateToProviderAction: { onAfter: (domain, provider) => { @@ -1780,7 +1787,7 @@ Removes a domain's association with this provider. --- -### Customization Props +### Customization props Customization props let you adapt the component to your brand, locale, and validation requirements without modifying source code. @@ -1837,16 +1844,16 @@ Set custom validation rules for provider and domain fields. All schema fields support: `regex`, `errorMessage`, `minLength`, `maxLength`, `required` -**provider.\*** - Provider configuration fields by strategy +**provider.\***—Provider configuration fields by strategy - Common: `name`, `displayName` - Strategy-specific fields (same as SsoProviderCreate) -**domains.create.domainUrl** - Domain URL validation +**domains.create.domainUrl**—Domain URL validation -```tsx +```tsx wrap lines - **header** - Component header + **header**—Component header - `title`, `back_button_text` -**tabs** - Tab labels +**tabs**—Tab labels - `sso`, `provisioning`, `domains` -**sso_tab** - SSO settings tab +**sso_tab**—SSO settings tab - `title`, `description` -- `fields.*` - Form field labels by strategy +- `fields.*`—Form field labels by strategy - `actions.save_button_text`, `actions.delete_button_text` - `delete_modal.*`, `remove_modal.*` -**provisioning_tab** - Provisioning tab +**provisioning_tab**—Provisioning tab - `title`, `description` - `scim_endpoint.label`, `scim_token.label` - `actions.enable_button_text`, `actions.disable_button_text` - `actions.generate_token_button_text`, `actions.revoke_token_button_text` -**domains_tab** - Domains tab +**domains_tab**—Domains tab - `title`, `description` - Same structure as DomainTable messages -**notifications** - API responses +**notifications**—API responses - `provider_update_success`, `provider_delete_success` - `provisioning_enable_success`, `provisioning_disable_success` @@ -1911,7 +1918,7 @@ Customize all text and translations. All fields are optional and use defaults if -```tsx +```tsx wrap lines - **Variables** - CSS custom properties - - `common` - Applied to all themes - - `light` - Light theme only - - `dark` - Dark theme only + **Variables**—CSS custom properties + - `common`—Applied to all themes + - `light`—Light theme only + - `dark`—Dark theme only -**Classes** - Component class overrides +**Classes**—Component class overrides - `SsoProviderEdit-header` - `SsoProviderEdit-tabs` @@ -1958,7 +1965,7 @@ Customize appearance with CSS variables and class overrides. Supports theme-awar -```tsx +```tsx wrap lines -### Available Hooks +### Available hooks These hooks provide the underlying logic without any UI. Use them to build completely custom interfaces while leveraging the Auth0 API integration. @@ -2066,17 +2073,17 @@ These hooks provide the underlying logic without any UI. Use them to build compl -## Setup Requirements +## Setup requirements - **Auth0 Configuration Required** - Ensure your tenant is configured with the + **Auth0 Configuration Required**—Ensure your tenant is configured with the My Organization API. [View setup guide →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) ## Installation -```bash +```bash wrap lines npx shadcn@latest add https://auth0-universal-components.vercel.app/r/my-organization/sso-provider-edit.json ``` @@ -2084,9 +2091,9 @@ npx shadcn@latest add https://auth0-universal-components.vercel.app/r/my-organiz Running the shadcn command also installs the @auth0/universal-components-core dependency for shared utilities and Auth0 integration. -## Getting Started +## Get started -```tsx +```tsx wrap lines import { SsoProviderEdit } from "@/components/auth0/my-organization/sso-provider-edit"; export function EditProviderPage({ providerId }) { @@ -2109,7 +2116,7 @@ export function EditProviderPage({ providerId }) { ``` -```tsx +```tsx wrap lines import React from "react"; import { SsoProviderEdit } from "@/components/auth0/my-organization/sso-provider-edit"; import { Auth0Provider } from "@auth0/auth0-react"; @@ -2208,7 +2215,7 @@ export default function App() { ## Props -### Core Props +### Core props Core props are fundamental to the component's operation. `SsoProviderEdit` requires the provider ID to load and edit the correct provider. @@ -2237,7 +2244,7 @@ Core props are fundamental to the component's operation. `SsoProviderEdit` requi --- -### Display Props +### Display props Display props control how the component renders without affecting its behavior. @@ -2266,7 +2273,7 @@ Display props control how the component renders without affecting its behavior. --- -### Action Props +### Action props User interactions across the three tabs are handled by several action props that are organized under the respective tab's name (`sso`, `provisioning`, and `domains`). @@ -2336,12 +2343,12 @@ Configures the back button in the component header. Use this to navigate back to **Properties:** -- `icon` - Custom Lucide icon component (optional, defaults to ArrowLeft) -- `onClick` - Click handler for navigation +- `icon`—Custom Lucide icon component (optional, defaults to ArrowLeft) +- `onClick`—Click handler for navigation **Example:** -```tsx +```tsx wrap lines import { ChevronLeft } from "lucide-react"; { @@ -2469,7 +2476,7 @@ Controls removing the provider from the organization without deleting it. The pr **Example:** -```tsx +```tsx wrap lines sso={{ removeFromOrganizationAction: { onBefore: (provider) => { @@ -2482,7 +2489,7 @@ sso={{ --- -### Provisioning Tab Actions +### Provisioning tab actions The `provisioning` prop configures actions for the SCIM provisioning tab. This tab manages automated user provisioning via the SCIM protocol. @@ -2557,7 +2564,7 @@ Enables SCIM provisioning for the provider. Once enabled, you can generate a SCI **Example:** -```tsx +```tsx wrap lines provisioning={{ createAction: { onBefore: (provider) => { @@ -2582,7 +2589,7 @@ Disables SCIM provisioning and removes all provisioning configuration for that i **Example:** -```tsx +```tsx wrap lines provisioning={{ deleteAction: { onBefore: (provider) => { @@ -2604,7 +2611,7 @@ Generates a new SCIM bearer token for your identity provider to authenticate wit **Example:** -```tsx +```tsx wrap lines provisioning={{ createScimTokenAction: { onAfter: (provider, tokenResponse) => { @@ -2626,7 +2633,7 @@ Revokes the SCIM token. The identity provider will no longer be able to sync use **Example:** -```tsx +```tsx wrap lines provisioning={{ deleteScimTokenAction: { onBefore: () => { @@ -2638,7 +2645,7 @@ provisioning={{ --- -### Domains Tab Actions +### Domains tab actions The `domains` prop configures actions for the domains tab. This tab manages domains associated with the provider for automatic user routing. @@ -2718,7 +2725,7 @@ Controls adding new domains to the organization from within the provider edit in **Example:** -```tsx +```tsx wrap lines domains={{ createAction: { onAfter: (domain) => { @@ -2739,7 +2746,7 @@ Controls domain verification via DNS TXT record. **Example:** -```tsx +```tsx wrap lines domains={{ verifyAction: { onBefore: (domain) => { @@ -2763,7 +2770,7 @@ Controls domain deletion. **Example:** -```tsx +```tsx wrap lines domains={{ deleteAction: { onBefore: (domain) => { @@ -2784,7 +2791,7 @@ Associates a verified domain with this SSO provider for automatic user routing. **Example:** -```tsx +```tsx wrap lines domains={{ associateToProviderAction: { onAfter: (domain, provider) => { @@ -2805,7 +2812,7 @@ Removes a domain's association with this provider. --- -### Customization Props +### Customization props Customization props let you adapt the component to your brand, locale, and validation requirements without modifying source code. @@ -2862,16 +2869,16 @@ Set custom validation rules for provider and domain fields. All schema fields support: `regex`, `errorMessage`, `minLength`, `maxLength`, `required` -**provider.\*** - Provider configuration fields by strategy +**provider.\***—Provider configuration fields by strategy - Common: `name`, `displayName` - Strategy-specific fields (same as SsoProviderCreate) -**domains.create.domainUrl** - Domain URL validation +**domains.create.domainUrl**—Domain URL validation -```tsx +```tsx wrap lines - **header** - Component header + **header**—Component header - `title`, `back_button_text` -**tabs** - Tab labels +**tabs**—Tab labels - `sso`, `provisioning`, `domains` -**sso_tab** - SSO settings tab +**sso_tab**—SSO settings tab - `title`, `description` -- `fields.*` - Form field labels by strategy +- `fields.*`—Form field labels by strategy - `actions.save_button_text`, `actions.delete_button_text` - `delete_modal.*`, `remove_modal.*` -**provisioning_tab** - Provisioning tab +**provisioning_tab**—Provisioning tab - `title`, `description` - `scim_endpoint.label`, `scim_token.label` - `actions.enable_button_text`, `actions.disable_button_text` - `actions.generate_token_button_text`, `actions.revoke_token_button_text` -**domains_tab** - Domains tab +**domains_tab**—Domains tab - `title`, `description` - Same structure as DomainTable messages -**notifications** - API responses +**notifications**—API responses - `provider_update_success`, `provider_delete_success` - `provisioning_enable_success`, `provisioning_disable_success` @@ -2936,7 +2943,7 @@ Customize all text and translations. All fields are optional and use defaults if -```tsx +```tsx wrap lines - **Variables** - CSS custom properties - - `common` - Applied to all themes - - `light` - Light theme only - - `dark` - Dark theme only + **Variables**—CSS custom properties + - `common`—Applied to all themes + - `light`—Light theme only + - `dark`—Dark theme only -**Classes** - Component class overrides +**Classes**—Component class overrides - `SsoProviderEdit-header` - `SsoProviderEdit-tabs` @@ -2983,7 +2990,7 @@ Customize appearance with CSS variables and class overrides. Supports theme-awar -```tsx +```tsx wrap lines -### Available Hooks +### Available hooks These hooks provide the underlying logic without any UI. Use them to build completely custom interfaces while leveraging the Auth0 API integration. diff --git a/main/docs/get-started/universal-components/web/components/sso-provider-table.mdx b/main/docs/get-started/universal-components/web/components/sso-provider-table.mdx index f936806de6..f9faba1bd4 100644 --- a/main/docs/get-started/universal-components/web/components/sso-provider-table.mdx +++ b/main/docs/get-started/universal-components/web/components/sso-provider-table.mdx @@ -4,6 +4,13 @@ sidebarTitle: SsoProviderTable component description: Display and manage SSO identity providers in a table interface with create, edit, delete, and enable/disable capabilities. --- + + Auth0 Universal Components is currently in Early Access. By using it, you + agree to the applicable Free Trial terms in [Okta's Master Subscription + Agreement](https://www.okta.com/agreements/). To learn more, read [Product + Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). + + The `SsoProviderTable` component provides a unified interface to list and configure [Single Sign-On](/docs/authenticate/enterprise-connections/self-service-enterprise-configuration) providers for your organization. import Spinner from "/snippets/Spinner.jsx"; @@ -17,10 +24,10 @@ import { ComponentLoader } from "/snippets/ComponentLoader.jsx"; -## Setup Requirements +## Setup requirements - **Auth0 Configuration Required** - Ensure your tenant is configured with the + **Auth0 Configuration Required**—Ensure your tenant is configured with the My Organization API. [View setup guide →](/docs/get-started/universal-components/web/components/build-delegated-admin#enable-the-my-organization-api) @@ -28,11 +35,11 @@ import { ComponentLoader } from "/snippets/ComponentLoader.jsx"; ## Installation -```bash pnpm +```bash pnpm wrap lines pnpm add @auth0/universal-components-react ``` -```bash npm +```bash npm wrap lines npm install @auth0/universal-components-react ``` @@ -43,9 +50,9 @@ npm install @auth0/universal-components-react dependency for shared utilities and Auth0 integration. -## Getting Started +## Get started -```tsx +```tsx wrap lines import { SsoProviderTable } from "@auth0/universal-components-react"; import { useNavigate } from "react-router-dom"; @@ -66,7 +73,7 @@ export function ProvidersPage() { ``` -```tsx +```tsx wrap lines import React from "react"; import { SsoProviderTable } from "@auth0/universal-components-react"; import { Auth0Provider } from "@auth0/auth0-react"; @@ -161,7 +168,7 @@ export default function App() { ## Props -### Required Props +### Required props Required props are fundamental to the component's operation. `SsoProviderTable` requires both navigation actions to handle the typical provider management workflow. @@ -208,13 +215,13 @@ The `createAction` prop is required because it controls where users are navigate **Properties:** -- `disabled` - Disable the "Add Provider" button -- `onBefore()` - Runs before the navigation occurs. Return `false` to prevent navigation (e.g., if the user lacks permissions). -- `onAfter()` - Runs after `onBefore` succeeds. Use this to navigate to your create page or track analytics. +- `disabled`—Disable the "Add Provider" button +- `onBefore()`—Runs before the navigation occurs. Return `false` to prevent navigation (for example, if the user lacks permissions). +- `onAfter()`—Runs after `onBefore` succeeds. Use this to navigate to your create page or track analytics. **Example:** -```tsx +```tsx wrap lines // Navigate to create page createAction={{ onAfter: () => navigate("/providers/create"), @@ -252,13 +259,13 @@ The `editAction` prop is required because it controls where users are navigated **Properties:** -- `disabled` - Disable row click navigation -- `onBefore(provider)` - Runs before the navigation occurs. Return `false` to prevent navigation (e.g., for conditional access checks). -- `onAfter(provider)` - Runs after `onBefore` succeeds. Use this to navigate to the edit page with the provider data. +- `disabled`—Disable row click navigation +- `onBefore(provider)`—Runs before the navigation occurs. Return `false` to prevent navigation (for example, for conditional access checks). +- `onAfter(provider)`—Runs after `onBefore` succeeds. Use this to navigate to the edit page with the provider data. **Example:** -```tsx +```tsx wrap lines // Navigate to edit page with provider ID editAction={{ onAfter: (provider) => navigate(`/providers/${provider.id}`), @@ -279,7 +286,7 @@ editAction={{ --- -### Display Props +### Display props Display props control how the component renders without affecting its behavior. Use these to hide sections or enable read-only mode. @@ -319,7 +326,7 @@ Display props control how the component renders without affecting its behavior. --- -### Action Props +### Action props Action props handle user interactions beyond the core navigation. These control deletion, removal, and enable/disable operations. @@ -373,17 +380,17 @@ Action props handle user interactions beyond the core navigation. These control **Type:** `ComponentAction` -Controls permanent deletion of an SSO provider. This is destructive - the provider is deleted from your Auth0 tenant entirely. +Controls permanent deletion of an SSO provider. This is destructive—the provider is deleted from your Auth0 tenant entirely. **Properties:** -- `disabled` - Disable the delete option -- `onBefore(provider)` - Runs before the deletion. Return `false` to prevent deletion (recommended for confirmation dialogs). -- `onAfter(provider)` - Runs after the provider is successfully deleted. Use this to track the event or show a notification. +- `disabled`—Disable the delete option +- `onBefore(provider)`—Runs before the deletion. Return `false` to prevent deletion (recommended for confirmation dialogs). +- `onAfter(provider)`—Runs after the provider is successfully deleted. Use this to track the event or show a notification. **Example:** -```tsx +```tsx wrap lines navigate("/providers/create") }} editAction={{ onAfter: (p) => navigate(`/providers/${p.id}`) }} @@ -412,13 +419,13 @@ Controls removing a provider from the organization without deleting it from the **Properties:** -- `disabled` - Disable the remove option -- `onBefore(provider)` - Runs before the removal. Return `false` to prevent removal (e.g., to show a confirmation). -- `onAfter(provider)` - Runs after the provider is successfully removed from the organization. +- `disabled`—Disable the remove option +- `onBefore(provider)`—Runs before the removal. Return `false` to prevent removal (for example, to show a confirmation). +- `onAfter(provider)`—Runs after the provider is successfully removed from the organization. **Example:** -```tsx +```tsx wrap lines navigate("/providers/create") }} editAction={{ onAfter: (p) => navigate(`/providers/${p.id}`) }} @@ -446,13 +453,13 @@ Controls the enable/disable toggle for providers. Disabled providers remain conf **Properties:** -- `disabled` - Disable the toggle -- `onBefore(provider)` - Runs before the toggle. Return `false` to prevent the state change. -- `onAfter(provider)` - Runs after the provider is successfully enabled or disabled. +- `disabled`—Disable the toggle +- `onBefore(provider)`—Runs before the toggle. Return `false` to prevent the state change. +- `onAfter(provider)`—Runs after the provider is successfully enabled or disabled. **Example:** -```tsx +```tsx wrap lines navigate("/providers/create") }} editAction={{ onAfter: (p) => navigate(`/providers/${p.id}`) }} @@ -479,7 +486,7 @@ Controls the enable/disable toggle for providers. Disabled providers remain conf --- -### Customization Props +### Customization props Customization props let you adapt the component to your brand, locale, and validation requirements without modifying source code. @@ -531,17 +538,17 @@ Customization props let you adapt the component to your brand, locale, and valid **schema** -Set custom validation rules for confirmation dialogs (e.g., type provider name to confirm deletion). +Set custom validation rules for confirmation dialogs (for example, type provider name to confirm deletion). All schema fields support: `regex`, `errorMessage` -**delete.providerName** - Confirmation for permanent deletion -**remove.providerName** - Confirmation for removal from organization +**delete.providerName**—Confirmation for permanent deletion +**remove.providerName**—Confirmation for removal from organization -```tsx +```tsx wrap lines navigate("/providers/create") }} editAction={{ onAfter: (p) => navigate(`/providers/${p.id}`) }} @@ -564,34 +571,34 @@ Set custom validation rules for confirmation dialogs (e.g., type provider name t Customize all text and translations. All fields are optional and use defaults if not provided. - **header** - Component header + **header**—Component header - `title`, `description`, `create_button_text` -**table** - Table display +**table**—Table display - `empty_message` - `columns.name`, `columns.strategy`, `columns.status` - `actions.edit_button_text`, `actions.delete_button_text`, `actions.remove_button_text` -**delete.modal** - Delete confirmation +**delete.modal**—Delete confirmation - `title`, `description` - `field.label`, `field.placeholder`, `field.error` - `actions.cancel_button_text`, `actions.delete_button_text` -**remove.modal** - Remove from organization confirmation +**remove.modal**—Remove from organization confirmation - `title`, `description` - `actions.cancel_button_text`, `actions.remove_button_text` -**notifications** - API responses +**notifications**—API responses - `provider_delete_success`, `provider_delete_error` - `provider_remove_success`, `provider_enable_success`, `provider_disable_success` -```tsx +```tsx wrap lines navigate("/providers/create") }} editAction={{ onAfter: (p) => navigate(`/providers/${p.id}`) }} @@ -620,12 +627,12 @@ Customize all text and translations. All fields are optional and use defaults if Customize appearance with CSS variables and class overrides. Supports theme-aware styling. - **Variables** - CSS custom properties - - `common` - Applied to all themes - - `light` - Light theme only - - `dark` - Dark theme only + **Variables**—CSS custom properties + - `common`—Applied to all themes + - `light`—Light theme only + - `dark`—Dark theme only -**Classes** - Component class overrides +**Classes**—Component class overrides - `SsoProviderTable-header` - `SsoProviderTable-table` @@ -635,7 +642,7 @@ Customize appearance with CSS variables and class overrides. Supports theme-awar -```tsx +```tsx wrap lines navigate("/providers/create") }} editAction={{ onAfter: (p) => navigate(`/providers/${p.id}`) }} @@ -658,11 +665,11 @@ Customize appearance with CSS variables and class overrides. Supports theme-awar --- -## Advanced Customization +## Advanced customization The `SsoProviderTable` component is composed of smaller subcomponents and hooks. You can import them individually to build custom provider management workflows if you use shadcn. -### Available Subcomponents +### Available subcomponents For advanced use cases, you can import individual subcomponents to build custom provider management interfaces. This is useful when you need to embed the table in a different layout or customize row rendering. @@ -707,7 +714,7 @@ For advanced use cases, you can import individual subcomponents to build custom -### Available Hooks +### Available hooks These hooks provide the underlying logic without any UI. Use them to build completely custom interfaces while leveraging the Auth0 API integration. @@ -738,10 +745,10 @@ These hooks provide the underlying logic without any UI. Use them to build compl -## Setup Requirements +## Setup requirements - **Auth0 Configuration Required** - Ensure your tenant is configured with the + **Auth0 Configuration Required**—Ensure your tenant is configured with the My Organization API. [View setup guide →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) @@ -749,11 +756,11 @@ These hooks provide the underlying logic without any UI. Use them to build compl ## Installation -```bash npm (Recommended) +```bash npm (Recommended) wrap lines npm install @auth0/universal-components-react ``` -```bash pnpm +```bash pnpm wrap lines pnpm add @auth0/universal-components-react ``` @@ -764,9 +771,9 @@ pnpm add @auth0/universal-components-react dependency for shared utilities and Auth0 integration. -## Getting Started +## Get started -```tsx page.tsx +```tsx page.tsx wrap lines import { SsoProviderTable } from "@auth0/universal-components-react"; import { useRouter } from "next/navigation"; @@ -787,7 +794,7 @@ export function ProvidersPage() { ``` -```tsx +```tsx wrap lines import React from "react"; import { SsoProviderTable } from "@auth0/universal-components-react"; import { useRouter } from "next/navigation"; @@ -862,7 +869,7 @@ export default ProvidersManagementPage; ## Props -### Core Props +### Core props Core props are fundamental to the component's operation. `SsoProviderTable` requires both navigation actions to handle the typical provider management workflow. @@ -909,13 +916,13 @@ The `createAction` prop is required because it controls where users are navigate **Properties:** -- `disabled` - Disable the "Add Provider" button -- `onBefore()` - Runs before the navigation occurs. Return `false` to prevent navigation (e.g., if the user lacks permissions). -- `onAfter()` - Runs after `onBefore` succeeds. Use this to navigate to your create page or track analytics. +- `disabled`—Disable the "Add Provider" button +- `onBefore()`—Runs before the navigation occurs. Return `false` to prevent navigation (for example, if the user lacks permissions). +- `onAfter()`—Runs after `onBefore` succeeds. Use this to navigate to your create page or track analytics. **Example:** -```tsx +```tsx wrap lines // Navigate to create page createAction={{ onAfter: () => router.push("/providers/create"), @@ -953,13 +960,13 @@ The `editAction` prop is required because it controls where users are navigated **Properties:** -- `disabled` - Disable row click navigation -- `onBefore(provider)` - Runs before the navigation occurs. Return `false` to prevent navigation (e.g., for conditional access checks). -- `onAfter(provider)` - Runs after `onBefore` succeeds. Use this to navigate to the edit page with the provider data. +- `disabled`—Disable row click navigation +- `onBefore(provider)`—Runs before the navigation occurs. Return `false` to prevent navigation (for example, for conditional access checks). +- `onAfter(provider)`—Runs after `onBefore` succeeds. Use this to navigate to the edit page with the provider data. **Example:** -```tsx +```tsx wrap lines // Navigate to edit page with provider ID editAction={{ onAfter: (provider) => router.push(`/providers/${provider.id}`), @@ -980,7 +987,7 @@ editAction={{ --- -### Display Props +### Display props Display props control how the component renders without affecting its behavior. Use these to hide sections or enable read-only mode. @@ -1020,7 +1027,7 @@ Display props control how the component renders without affecting its behavior. --- -### Action Props +### Action props Action props handle user interactions beyond the core navigation. These control deletion, removal, and enable/disable operations. @@ -1074,17 +1081,17 @@ Action props handle user interactions beyond the core navigation. These control **Type:** `ComponentAction` -Controls permanent deletion of an SSO provider. This is destructive - the provider is deleted from your Auth0 tenant entirely. +Controls permanent deletion of an SSO provider. This is destructive—the provider is deleted from your Auth0 tenant entirely. **Properties:** -- `disabled` - Disable the delete option -- `onBefore(provider)` - Runs before the deletion. Return `false` to prevent deletion (recommended for confirmation dialogs). -- `onAfter(provider)` - Runs after the provider is successfully deleted. Use this to track the event or show a notification. +- `disabled`—Disable the delete option +- `onBefore(provider)`—Runs before the deletion. Return `false` to prevent deletion (recommended for confirmation dialogs). +- `onAfter(provider)`—Runs after the provider is successfully deleted. Use this to track the event or show a notification. **Example:** -```tsx +```tsx wrap lines router.push("/providers/create") }} editAction={{ onAfter: (p) => router.push(`/providers/${p.id}`) }} @@ -1113,13 +1120,13 @@ Controls removing a provider from the organization without deleting it from the **Properties:** -- `disabled` - Disable the remove option -- `onBefore(provider)` - Runs before the removal. Return `false` to prevent removal (e.g., to show a confirmation). -- `onAfter(provider)` - Runs after the provider is successfully removed from the organization. +- `disabled`—Disable the remove option +- `onBefore(provider)`—Runs before the removal. Return `false` to prevent removal (for example, to show a confirmation). +- `onAfter(provider)`—Runs after the provider is successfully removed from the organization. **Example:** -```tsx +```tsx wrap lines router.push("/providers/create") }} editAction={{ onAfter: (p) => router.push(`/providers/${p.id}`) }} @@ -1147,13 +1154,13 @@ Controls the enable/disable toggle for providers. Disabled providers remain conf **Properties:** -- `disabled` - Disable the toggle -- `onBefore(provider)` - Runs before the toggle. Return `false` to prevent the state change. -- `onAfter(provider)` - Runs after the provider is successfully enabled or disabled. +- `disabled`—Disable the toggle +- `onBefore(provider)`—Runs before the toggle. Return `false` to prevent the state change. +- `onAfter(provider)`—Runs after the provider is successfully enabled or disabled. **Example:** -```tsx +```tsx wrap lines router.push("/providers/create") }} editAction={{ onAfter: (p) => router.push(`/providers/${p.id}`) }} @@ -1180,7 +1187,7 @@ Controls the enable/disable toggle for providers. Disabled providers remain conf --- -### Customization Props +### Customization props Customization props let you adapt the component to your brand, locale, and validation requirements without modifying source code. @@ -1232,17 +1239,17 @@ Customization props let you adapt the component to your brand, locale, and valid **schema** -Set custom validation rules for confirmation dialogs (e.g., type provider name to confirm deletion). +Set custom validation rules for confirmation dialogs (for example, type provider name to confirm deletion). All schema fields support: `regex`, `errorMessage` -**delete.providerName** - Confirmation for permanent deletion -**remove.providerName** - Confirmation for removal from organization +**delete.providerName**—Confirmation for permanent deletion +**remove.providerName**—Confirmation for removal from organization -```tsx +```tsx wrap lines router.push("/providers/create") }} editAction={{ onAfter: (p) => router.push(`/providers/${p.id}`) }} @@ -1265,34 +1272,34 @@ Set custom validation rules for confirmation dialogs (e.g., type provider name t Customize all text and translations. All fields are optional and use defaults if not provided. - **header** - Component header + **header**—Component header - `title`, `description`, `create_button_text` -**table** - Table display +**table**—Table display - `empty_message` - `columns.name`, `columns.strategy`, `columns.status` - `actions.edit_button_text`, `actions.delete_button_text`, `actions.remove_button_text` -**delete.modal** - Delete confirmation +**delete.modal**—Delete confirmation - `title`, `description` - `field.label`, `field.placeholder`, `field.error` - `actions.cancel_button_text`, `actions.delete_button_text` -**remove.modal** - Remove from organization confirmation +**remove.modal**—Remove from organization confirmation - `title`, `description` - `actions.cancel_button_text`, `actions.remove_button_text` -**notifications** - API responses +**notifications**—API responses - `provider_delete_success`, `provider_delete_error` - `provider_remove_success`, `provider_enable_success`, `provider_disable_success` -```tsx +```tsx wrap lines router.push("/providers/create") }} editAction={{ onAfter: (p) => router.push(`/providers/${p.id}`) }} @@ -1321,12 +1328,12 @@ Customize all text and translations. All fields are optional and use defaults if Customize appearance with CSS variables and class overrides. Supports theme-aware styling. - **Variables** - CSS custom properties - - `common` - Applied to all themes - - `light` - Light theme only - - `dark` - Dark theme only + **Variables**—CSS custom properties + - `common`—Applied to all themes + - `light`—Light theme only + - `dark`—Dark theme only -**Classes** - Component class overrides +**Classes**—Component class overrides - `SsoProviderTable-header` - `SsoProviderTable-table` @@ -1336,7 +1343,7 @@ Customize appearance with CSS variables and class overrides. Supports theme-awar -```tsx +```tsx wrap lines router.push("/providers/create") }} editAction={{ onAfter: (p) => router.push(`/providers/${p.id}`) }} @@ -1359,11 +1366,11 @@ Customize appearance with CSS variables and class overrides. Supports theme-awar --- -## Advanced Customization +## Advanced customization The `SsoProviderTable` component is composed of smaller subcomponents and hooks. You can import them individually to build custom provider management workflows. -### Available Subcomponents +### Available subcomponents For advanced use cases, you can import individual subcomponents to build custom provider management interfaces. This is useful when you need to embed the table in a different layout or customize row rendering. @@ -1408,7 +1415,7 @@ For advanced use cases, you can import individual subcomponents to build custom -### Available Hooks +### Available hooks These hooks provide the underlying logic without any UI. Use them to build completely custom interfaces while leveraging the Auth0 API integration. @@ -1440,17 +1447,17 @@ These hooks provide the underlying logic without any UI. Use them to build compl -## Setup Requirements +## Setup requirements - **Auth0 Configuration Required** - Ensure your tenant is configured with the + **Auth0 Configuration Required**—Ensure your tenant is configured with the My Organization API. [View setup guide →](/docs/get-started/universal-components/web/components/build-delegated-admin#configure-auth0-dashboard) ## Installation -```bash +```bash wrap lines npx shadcn@latest add https://auth0-universal-components.vercel.app/r/my-organization/sso-provider-table.json ``` @@ -1459,9 +1466,9 @@ npx shadcn@latest add https://auth0-universal-components.vercel.app/r/my-organiz dependency for shared utilities and Auth0 integration. -## Getting Started +## Get started -```tsx +```tsx wrap lines import { SsoProviderTable } from "@/components/auth0/my-organization/sso-provider-table"; export function ProvidersPage() { @@ -1481,7 +1488,7 @@ export function ProvidersPage() { ``` -```tsx +```tsx wrap lines import React from "react"; import { SsoProviderTable } from "@/components/auth0/my-organization/sso-provider-table"; import { Auth0Provider } from "@auth0/auth0-react"; @@ -1576,7 +1583,7 @@ export default function App() { ## Props -### Core Props +### Core props Core props are fundamental to the component's operation. `SsoProviderTable` requires both navigation actions to handle the typical provider management workflow. @@ -1623,13 +1630,13 @@ The `createAction` prop is required because it controls where users are navigate **Properties:** -- `disabled` - Disable the "Add Provider" button -- `onBefore()` - Runs before the navigation occurs. Return `false` to prevent navigation (e.g., if the user lacks permissions). -- `onAfter()` - Runs after `onBefore` succeeds. Use this to navigate to your create page or track analytics. +- `disabled`—Disable the "Add Provider" button +- `onBefore()`—Runs before the navigation occurs. Return `false` to prevent navigation (for example, if the user lacks permissions). +- `onAfter()`—Runs after `onBefore` succeeds. Use this to navigate to your create page or track analytics. **Example:** -```tsx +```tsx wrap lines // Navigate to create page createAction={{ onAfter: () => navigate("/providers/create"), @@ -1667,13 +1674,13 @@ The `editAction` prop is required because it controls where users are navigated **Properties:** -- `disabled` - Disable row click navigation -- `onBefore(provider)` - Runs before the navigation occurs. Return `false` to prevent navigation (e.g., for conditional access checks). -- `onAfter(provider)` - Runs after `onBefore` succeeds. Use this to navigate to the edit page with the provider data. +- `disabled`—Disable row click navigation +- `onBefore(provider)`—Runs before the navigation occurs. Return `false` to prevent navigation (for example, for conditional access checks). +- `onAfter(provider)`—Runs after `onBefore` succeeds. Use this to navigate to the edit page with the provider data. **Example:** -```tsx +```tsx wrap lines // Navigate to edit page with provider ID editAction={{ onAfter: (provider) => navigate(`/providers/${provider.id}`), @@ -1694,7 +1701,7 @@ editAction={{ --- -### Display Props +### Display props Display props control how the component renders without affecting its behavior. Use these to hide sections or enable read-only mode. @@ -1734,7 +1741,7 @@ Display props control how the component renders without affecting its behavior. --- -### Action Props +### Action props Action props handle user interactions beyond the core navigation. These control deletion, removal, and enable/disable operations. @@ -1788,17 +1795,17 @@ Action props handle user interactions beyond the core navigation. These control **Type:** `ComponentAction` -Controls permanent deletion of an SSO provider. This is destructive - the provider is deleted from your Auth0 tenant entirely. +Controls permanent deletion of an SSO provider. This is destructive—the provider is deleted from your Auth0 tenant entirely. **Properties:** -- `disabled` - Disable the delete option -- `onBefore(provider)` - Runs before the deletion. Return `false` to prevent deletion (recommended for confirmation dialogs). -- `onAfter(provider)` - Runs after the provider is successfully deleted. Use this to track the event or show a notification. +- `disabled`—Disable the delete option +- `onBefore(provider)`—Runs before the deletion. Return `false` to prevent deletion (recommended for confirmation dialogs). +- `onAfter(provider)`—Runs after the provider is successfully deleted. Use this to track the event or show a notification. **Example:** -```tsx +```tsx wrap lines navigate("/providers/create") }} editAction={{ onAfter: (p) => navigate(`/providers/${p.id}`) }} @@ -1827,13 +1834,13 @@ Controls removing a provider from the organization without deleting it from the **Properties:** -- `disabled` - Disable the remove option -- `onBefore(provider)` - Runs before the removal. Return `false` to prevent removal (e.g., to show a confirmation). -- `onAfter(provider)` - Runs after the provider is successfully removed from the organization. +- `disabled`—Disable the remove option +- `onBefore(provider)`—Runs before the removal. Return `false` to prevent removal (for example, to show a confirmation). +- `onAfter(provider)`—Runs after the provider is successfully removed from the organization. **Example:** -```tsx +```tsx wrap lines navigate("/providers/create") }} editAction={{ onAfter: (p) => navigate(`/providers/${p.id}`) }} @@ -1861,13 +1868,13 @@ Controls the enable/disable toggle for providers. Disabled providers remain conf **Properties:** -- `disabled` - Disable the toggle -- `onBefore(provider)` - Runs before the toggle. Return `false` to prevent the state change. -- `onAfter(provider)` - Runs after the provider is successfully enabled or disabled. +- `disabled`—Disable the toggle +- `onBefore(provider)`—Runs before the toggle. Return `false` to prevent the state change. +- `onAfter(provider)`—Runs after the provider is successfully enabled or disabled. **Example:** -```tsx +```tsx wrap lines navigate("/providers/create") }} editAction={{ onAfter: (p) => navigate(`/providers/${p.id}`) }} @@ -1894,7 +1901,7 @@ Controls the enable/disable toggle for providers. Disabled providers remain conf --- -### Customization Props +### Customization props Customization props let you adapt the component to your brand, locale, and validation requirements without modifying source code. @@ -1946,17 +1953,17 @@ Customization props let you adapt the component to your brand, locale, and valid **schema** -Set custom validation rules for confirmation dialogs (e.g., type provider name to confirm deletion). +Set custom validation rules for confirmation dialogs (for example, type provider name to confirm deletion). All schema fields support: `regex`, `errorMessage` -**delete.providerName** - Confirmation for permanent deletion -**remove.providerName** - Confirmation for removal from organization +**delete.providerName**—Confirmation for permanent deletion +**remove.providerName**—Confirmation for removal from organization -```tsx +```tsx wrap lines navigate("/providers/create") }} editAction={{ onAfter: (p) => navigate(`/providers/${p.id}`) }} @@ -1979,34 +1986,34 @@ Set custom validation rules for confirmation dialogs (e.g., type provider name t Customize all text and translations. All fields are optional and use defaults if not provided. - **header** - Component header + **header**—Component header - `title`, `description`, `create_button_text` -**table** - Table display +**table**—Table display - `empty_message` - `columns.name`, `columns.strategy`, `columns.status` - `actions.edit_button_text`, `actions.delete_button_text`, `actions.remove_button_text` -**delete.modal** - Delete confirmation +**delete.modal**—Delete confirmation - `title`, `description` - `field.label`, `field.placeholder`, `field.error` - `actions.cancel_button_text`, `actions.delete_button_text` -**remove.modal** - Remove from organization confirmation +**remove.modal**—Remove from organization confirmation - `title`, `description` - `actions.cancel_button_text`, `actions.remove_button_text` -**notifications** - API responses +**notifications**—API responses - `provider_delete_success`, `provider_delete_error` - `provider_remove_success`, `provider_enable_success`, `provider_disable_success` -```tsx +```tsx wrap lines navigate("/providers/create") }} editAction={{ onAfter: (p) => navigate(`/providers/${p.id}`) }} @@ -2035,12 +2042,12 @@ Customize all text and translations. All fields are optional and use defaults if Customize appearance with CSS variables and class overrides. Supports theme-aware styling. - **Variables** - CSS custom properties - - `common` - Applied to all themes - - `light` - Light theme only - - `dark` - Dark theme only + **Variables**—CSS custom properties + - `common`—Applied to all themes + - `light`—Light theme only + - `dark`—Dark theme only -**Classes** - Component class overrides +**Classes**—Component class overrides - `SsoProviderTable-header` - `SsoProviderTable-table` @@ -2050,7 +2057,7 @@ Customize appearance with CSS variables and class overrides. Supports theme-awar -```tsx +```tsx wrap lines navigate("/providers/create") }} editAction={{ onAfter: (p) => navigate(`/providers/${p.id}`) }} @@ -2073,11 +2080,11 @@ Customize appearance with CSS variables and class overrides. Supports theme-awar --- -## Advanced Customization +## Advanced customization The `SsoProviderTable` component is composed of smaller subcomponents and hooks. You can import them individually to build custom provider management workflows if you use shadcn. -### Available Subcomponents +### Available subcomponents For advanced use cases, you can import individual subcomponents to build custom provider management interfaces. This is useful when you need to embed the table in a different layout or customize row rendering. @@ -2122,7 +2129,7 @@ For advanced use cases, you can import individual subcomponents to build custom -### Available Hooks +### Available hooks These hooks provide the underlying logic without any UI. Use them to build completely custom interfaces while leveraging the Auth0 API integration. diff --git a/main/docs/get-started/universal-components/web/universal-components-style.mdx b/main/docs/get-started/universal-components/web/universal-components-style.mdx index 2b4fab223f..125249160b 100644 --- a/main/docs/get-started/universal-components/web/universal-components-style.mdx +++ b/main/docs/get-started/universal-components/web/universal-components-style.mdx @@ -11,7 +11,7 @@ sidebarTitle: Customize Style and Themes Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). -Auth0 Universal Components are built on a flexible design system utilizes [Tailwind CSS](https://tailwindcss.com/docs/installation/using-vite) and [Radix UI primitives](https://www.radix-ui.com/primitives/docs/overview/introduction). Styling is orchestrated through the [`Auth0ComponentProvider`](/docs/get-started/universal-components/web/auth0-component-provider) to allow you to choose between high-level presets or fine-grained CSS variable overrides. +Auth0 Universal Components are built on a flexible design system that uses [Tailwind CSS](https://tailwindcss.com/docs/installation/using-vite) and [Radix UI primitives](https://www.radix-ui.com/primitives/docs/overview/introduction). Styling is orchestrated through the [`Auth0ComponentProvider`](/docs/get-started/universal-components/web/auth0-component-provider) to allow you to choose between high-level presets or fine-grained CSS variable overrides. This architecture ensures that your identity flows look and feel like native parts of your application. @@ -21,7 +21,7 @@ This architecture ensures that your identity flows look and feel like native par 1. Import the stylesheet. -```tsx +```tsx wrap lines import "@auth0/universal-components-react/styles"; ``` @@ -32,7 +32,7 @@ import "@auth0/universal-components-react/styles"; 2. Add your brand color. -```css +```css wrap lines :root { --primary: #4f46e5; /* your brand color */ --primary-foreground: #ffffff; /* text on buttons */ @@ -47,7 +47,7 @@ Done. All buttons, links, and active states now use your brand. Pass `themeSettings` to `Auth0ComponentProvider` to switch between built-in themes. -```tsx App.tsx +```tsx App.tsx wrap lines -```css +```css wrap lines :root { /* Brand - the most impactful variables */ --primary: oklch(37% 0 0); /* buttons, links, active states */ --primary-foreground: oklch(100% 0 0); /* text on primary surfaces */ -/_ Surfaces _/ ---background: oklch(100% 0 0); /_ page background _/ ---foreground: oklch(9% 0 0); /_ default text _/ ---card: oklch(100% 0 0); /_ card background _/ ---card-foreground: oklch(0% 0 0); /_ text inside cards _/ ---popover: oklch(100% 0 0); /_ dropdown/dialog background _/ ---popover-foreground: oklch(9% 0 0); /_ text inside popovers _/ ---input: oklch(100% 0 0); /_ input field background _/ +/* Surfaces */ +--background: oklch(100% 0 0); /* page background */ +--foreground: oklch(9% 0 0); /* default text */ +--card: oklch(100% 0 0); /* card background */ +--card-foreground: oklch(0% 0 0); /* text inside cards */ +--popover: oklch(100% 0 0); /* dropdown/dialog background */ +--popover-foreground: oklch(9% 0 0); /* text inside popovers */ +--input: oklch(100% 0 0); /* input field background */ -/_ Secondary & muted _/ +/* Secondary & muted */ --secondary: oklch(96% 0 0); --secondary-foreground: oklch(100% 0 0); ---muted: oklch(96% 0 0); /_ disabled backgrounds _/ ---muted-foreground: oklch(45% 0 0); /_ placeholder text _/ +--muted: oklch(96% 0 0); /* disabled backgrounds */ +--muted-foreground: oklch(45% 0 0); /* placeholder text */ -/_ Accent & destructive _/ ---accent: oklch(97% 0 0); /_ hover highlights _/ +/* Accent & destructive */ +--accent: oklch(97% 0 0); /* hover highlights */ --accent-foreground: oklch(9% 0 0); ---destructive: oklch(93% 0.03 17); /_ error states _/ +--destructive: oklch(93% 0.03 17); /* error states */ --destructive-foreground: oklch(36% 0.14 17); -/_ Borders _/ +/* Borders */ --border: oklch(89% 0 0); ---ring: oklch(89% 0 0); /_ focus ring _/ +--ring: oklch(89% 0 0); /* focus ring */ } -```` +``` -```css +```css wrap lines .dark { /* Brand */ --primary: oklch(70% 0.15 250); /* brighter for dark backgrounds */ @@ -161,11 +161,11 @@ All visual properties are driven by CSS custom properties. Override them in your --border: oklch(25% 0 0); --ring: oklch(35% 0 0); } -```` +``` -```css +```css wrap lines :root { /* Common - adjust these for overall feel */ --radius-sm: 4px; /* tags, chips */ @@ -174,17 +174,17 @@ All visual properties are driven by CSS custom properties. Override them in your --radius-xl: 12px; /* cards */ --radius-2xl: 16px; /* modals, large panels */ -/_ Fine-grained (rarely needed) _/ +/* Fine-grained (rarely needed) */ --radius-xs: 2px; --radius-3xl: 20px; --radius-4xl: 24px; --radius-5xl: 32px; } -```` +``` -```css +```css wrap lines :root { --font-size-page-header: 2.25rem; /* 36px - main title */ --font-size-heading: 1.5rem; /* 24px - section headings */ @@ -195,7 +195,7 @@ All visual properties are driven by CSS custom properties. Override them in your --font-size-label: 0.875rem; /* 14px - form labels */ --font-size-page-description: 0.875rem; /* 14px - subtitles */ } -```` +``` @@ -206,7 +206,7 @@ All visual properties are driven by CSS custom properties. Override them in your Every component accepts a `styling` prop for targeted overrides without affecting global styles. -```tsx +```tsx wrap lines Each component exposes class targets for its major sections: @@ -261,11 +261,11 @@ Every component accepts a `styling` prop for targeted overrides without affectin ## Common customizations -### Brand colors (Hex) +### Brand colors (hex) Convert your brand hex color to the format used in CSS: -```css +```css wrap lines :root { /* Using hex directly */ --primary: #4f46e5; @@ -280,7 +280,7 @@ Convert your brand hex color to the format used in CSS: For a more rounded aesthetic across all components: -```css +```css wrap lines :root { --radius-lg: 16px; /* buttons, inputs */ --radius-xl: 20px; /* cards */ @@ -292,7 +292,7 @@ For a more rounded aesthetic across all components: For denser UIs: -```css +```css wrap lines :root { --font-size-page-header: 1.75rem; --font-size-heading: 1.25rem; @@ -307,7 +307,7 @@ For denser UIs: The components automatically respond to the `mode` setting in `themeSettings`. To sync with your app's dark mode: -```tsx +```tsx wrap lines function App() { const [isDark, setIsDark] = useState(false); @@ -325,7 +325,7 @@ function App() { Or use system preference: -```tsx +```tsx wrap lines const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; **Tailwind v4 users:** Add `@import "@auth0/universal-components-react/tailwind"` to your CSS file. -**Shadcn users:** No import needed - styles are already in your Tailwind build. +**Shadcn users:** No import needed—styles are already in your Tailwind build. 2. Add your brand color. -```css +```css wrap lines :root { --primary: #4f46e5; /* your brand color */ --primary-foreground: #ffffff; /* text on buttons */ @@ -387,7 +387,7 @@ Done. All buttons, links, and active states now use your brand. Pass `themeSettings` to `Auth0ComponentProvider` to switch between built-in themes. -```tsx layout.tsx +```tsx layout.tsx wrap lines -```css +```css wrap lines :root { /* Brand - the most impactful variables */ --primary: oklch(37% 0 0); /* buttons, links, active states */ --primary-foreground: oklch(100% 0 0); /* text on primary surfaces */ -/_ Surfaces _/ ---background: oklch(100% 0 0); /_ page background _/ ---foreground: oklch(9% 0 0); /_ default text _/ ---card: oklch(100% 0 0); /_ card background _/ ---card-foreground: oklch(0% 0 0); /_ text inside cards _/ ---popover: oklch(100% 0 0); /_ dropdown/dialog background _/ ---popover-foreground: oklch(9% 0 0); /_ text inside popovers _/ ---input: oklch(100% 0 0); /_ input field background _/ +/* Surfaces */ +--background: oklch(100% 0 0); /* page background */ +--foreground: oklch(9% 0 0); /* default text */ +--card: oklch(100% 0 0); /* card background */ +--card-foreground: oklch(0% 0 0); /* text inside cards */ +--popover: oklch(100% 0 0); /* dropdown/dialog background */ +--popover-foreground: oklch(9% 0 0); /* text inside popovers */ +--input: oklch(100% 0 0); /* input field background */ -/_ Secondary & muted _/ +/* Secondary & muted */ --secondary: oklch(96% 0 0); --secondary-foreground: oklch(100% 0 0); ---muted: oklch(96% 0 0); /_ disabled backgrounds _/ ---muted-foreground: oklch(45% 0 0); /_ placeholder text _/ +--muted: oklch(96% 0 0); /* disabled backgrounds */ +--muted-foreground: oklch(45% 0 0); /* placeholder text */ -/_ Accent & destructive _/ ---accent: oklch(97% 0 0); /_ hover highlights _/ +/* Accent & destructive */ +--accent: oklch(97% 0 0); /* hover highlights */ --accent-foreground: oklch(9% 0 0); ---destructive: oklch(93% 0.03 17); /_ error states _/ +--destructive: oklch(93% 0.03 17); /* error states */ --destructive-foreground: oklch(36% 0.14 17); -/_ Borders _/ +/* Borders */ --border: oklch(89% 0 0); ---ring: oklch(89% 0 0); /_ focus ring _/ +--ring: oklch(89% 0 0); /* focus ring */ } -```` +``` -```css +```css wrap lines .dark { /* Brand */ --primary: oklch(70% 0.15 250); /* brighter for dark backgrounds */ @@ -504,11 +504,11 @@ All visual properties are driven by CSS custom properties. Override them in your --border: oklch(25% 0 0); --ring: oklch(35% 0 0); } -```` +``` -```css +```css wrap lines :root { /* Common - adjust these for overall feel */ --radius-sm: 4px; /* tags, chips */ @@ -517,17 +517,17 @@ All visual properties are driven by CSS custom properties. Override them in your --radius-xl: 12px; /* cards */ --radius-2xl: 16px; /* modals, large panels */ -/_ Fine-grained (rarely needed) _/ +/* Fine-grained (rarely needed) */ --radius-xs: 2px; --radius-3xl: 20px; --radius-4xl: 24px; --radius-5xl: 32px; } -```` +``` -```css +```css wrap lines :root { --font-size-page-header: 2.25rem; /* 36px - main title */ --font-size-heading: 1.5rem; /* 24px - section headings */ @@ -538,7 +538,7 @@ All visual properties are driven by CSS custom properties. Override them in your --font-size-label: 0.875rem; /* 14px - form labels */ --font-size-page-description: 0.875rem; /* 14px - subtitles */ } -```` +``` @@ -549,7 +549,7 @@ All visual properties are driven by CSS custom properties. Override them in your Every component accepts a `styling` prop for targeted overrides without affecting global styles. -```tsx layout.tsx +```tsx layout.tsx wrap lines Each component exposes class targets for its major sections: @@ -604,11 +604,11 @@ Every component accepts a `styling` prop for targeted overrides without affectin ## Common customizations -### Brand colors (Hex) +### Brand colors (hex) Convert your brand hex color to the format used in CSS: -```css +```css wrap lines :root { /* Using hex directly */ --primary: #4f46e5; @@ -623,7 +623,7 @@ Convert your brand hex color to the format used in CSS: For a more rounded aesthetic across all components: -```css +```css wrap lines :root { --radius-lg: 16px; /* buttons, inputs */ --radius-xl: 20px; /* cards */ @@ -635,7 +635,7 @@ For a more rounded aesthetic across all components: For denser UIs: -```css +```css wrap lines :root { --font-size-page-header: 1.75rem; --font-size-heading: 1.25rem; @@ -650,7 +650,7 @@ For denser UIs: The components automatically respond to the `mode` setting in `themeSettings`. To sync with your app's dark mode: -```tsx +```tsx wrap lines function App() { const [isDark, setIsDark] = useState(false); @@ -671,7 +671,7 @@ function App() { Or use system preference: -```tsx +```tsx wrap lines const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; -```css +```css wrap lines :root { /* Brand - the most impactful variables */ --primary: oklch(37% 0 0); /* buttons, links, active states */ --primary-foreground: oklch(100% 0 0); /* text on primary surfaces */ -/_ Surfaces _/ ---background: oklch(100% 0 0); /_ page background _/ ---foreground: oklch(9% 0 0); /_ default text _/ ---card: oklch(100% 0 0); /_ card background _/ ---card-foreground: oklch(0% 0 0); /_ text inside cards _/ ---popover: oklch(100% 0 0); /_ dropdown/dialog background _/ ---popover-foreground: oklch(9% 0 0); /_ text inside popovers _/ ---input: oklch(100% 0 0); /_ input field background _/ +/* Surfaces */ +--background: oklch(100% 0 0); /* page background */ +--foreground: oklch(9% 0 0); /* default text */ +--card: oklch(100% 0 0); /* card background */ +--card-foreground: oklch(0% 0 0); /* text inside cards */ +--popover: oklch(100% 0 0); /* dropdown/dialog background */ +--popover-foreground: oklch(9% 0 0); /* text inside popovers */ +--input: oklch(100% 0 0); /* input field background */ -/_ Secondary & muted _/ +/* Secondary & muted */ --secondary: oklch(96% 0 0); --secondary-foreground: oklch(100% 0 0); ---muted: oklch(96% 0 0); /_ disabled backgrounds _/ ---muted-foreground: oklch(45% 0 0); /_ placeholder text _/ +--muted: oklch(96% 0 0); /* disabled backgrounds */ +--muted-foreground: oklch(45% 0 0); /* placeholder text */ -/_ Accent & destructive _/ ---accent: oklch(97% 0 0); /_ hover highlights _/ +/* Accent & destructive */ +--accent: oklch(97% 0 0); /* hover highlights */ --accent-foreground: oklch(9% 0 0); ---destructive: oklch(93% 0.03 17); /_ error states _/ +--destructive: oklch(93% 0.03 17); /* error states */ --destructive-foreground: oklch(36% 0.14 17); -/_ Borders _/ +/* Borders */ --border: oklch(89% 0 0); ---ring: oklch(89% 0 0); /_ focus ring _/ +--ring: oklch(89% 0 0); /* focus ring */ } -```` +``` -```css +```css wrap lines .dark { /* Brand */ --primary: oklch(70% 0.15 250); /* brighter for dark backgrounds */ @@ -827,11 +827,11 @@ All visual properties are driven by CSS custom properties. Override them in your --border: oklch(25% 0 0); --ring: oklch(35% 0 0); } -```` +``` -```css +```css wrap lines :root { /* Common - adjust these for overall feel */ --radius-sm: 4px; /* tags, chips */ @@ -840,17 +840,17 @@ All visual properties are driven by CSS custom properties. Override them in your --radius-xl: 12px; /* cards */ --radius-2xl: 16px; /* modals, large panels */ -/_ Fine-grained (rarely needed) _/ +/* Fine-grained (rarely needed) */ --radius-xs: 2px; --radius-3xl: 20px; --radius-4xl: 24px; --radius-5xl: 32px; } -```` +``` -```css +```css wrap lines :root { --font-size-page-header: 2.25rem; /* 36px - main title */ --font-size-heading: 1.5rem; /* 24px - section headings */ @@ -861,7 +861,7 @@ All visual properties are driven by CSS custom properties. Override them in your --font-size-label: 0.875rem; /* 14px - form labels */ --font-size-page-description: 0.875rem; /* 14px - subtitles */ } -```` +``` @@ -872,7 +872,7 @@ All visual properties are driven by CSS custom properties. Override them in your Every component accepts a `styling` prop for targeted overrides without affecting global styles. -```tsx +```tsx wrap lines Each component exposes class targets for its major sections: @@ -927,11 +927,11 @@ Every component accepts a `styling` prop for targeted overrides without affectin ## Common customizations -### Brand colors (Hex) +### Brand colors (hex) Convert your brand hex color to the format used in CSS: -```css +```css wrap lines :root { /* Using hex directly */ --primary: #4f46e5; @@ -946,7 +946,7 @@ Convert your brand hex color to the format used in CSS: For a more rounded aesthetic across all components: -```css +```css wrap lines :root { --radius-lg: 16px; /* buttons, inputs */ --radius-xl: 20px; /* cards */ @@ -958,7 +958,7 @@ For a more rounded aesthetic across all components: For denser UIs: -```css +```css wrap lines :root { --font-size-page-header: 1.75rem; --font-size-heading: 1.25rem; @@ -973,7 +973,7 @@ For denser UIs: The components automatically respond to the `mode` setting in `themeSettings`. To sync with your app's dark mode: -```tsx +```tsx wrap lines function App() { const [isDark, setIsDark] = useState(false); @@ -991,7 +991,7 @@ function App() { Or use system preference: -```tsx +```tsx wrap lines const prefersDark = window.matchMedia('(prefers-color-scheme: dark)').matches; -```bash npm +```bash npm wrap lines npm install @auth0/universal-components-react react-hook-form @auth0/auth0-react ``` -```bash pnpm +```bash pnpm wrap lines pnpm add @auth0/universal-components-react react-hook-form @auth0/auth0-react ``` @@ -46,7 +46,7 @@ Installs the package alongside `react-hook-form` (a peer dependency) and `@auth0 1. Wrap your application with `Auth0Provider` and `Auth0ComponentProvider`: -```tsx App.tsx +```tsx App.tsx wrap lines import { Auth0Provider } from "@auth0/auth0-react"; import { Auth0ComponentProvider } from "@auth0/universal-components-react/spa"; import "@auth0/universal-components-react/styles"; @@ -73,7 +73,7 @@ function App() { 2. Import Universal Components: -```tsx OrganizationManagementPage.tsx +```tsx OrganizationManagementPage.tsx wrap lines import { useAuth0 } from "@auth0/auth0-react"; import { OrganizationDetailsEdit } from "@auth0/universal-components-react/spa"; @@ -95,7 +95,7 @@ function OrganizationManagementPage() { The `Auth0ComponentProvider` manages authentication, caching, internationalization, and toast notifications for all components. -```tsx App.tsx +```tsx App.tsx wrap lines -```bash npm +```bash npm wrap lines npm install @auth0/universal-components-react react-hook-form ``` -```bash pnpm +```bash pnpm wrap lines pnpm add @auth0/universal-components-react react-hook-form ``` @@ -151,7 +151,7 @@ pnpm add @auth0/universal-components-react react-hook-form In your root layout, add the `Auth0ComponentProvider` in proxy mode. `Auth0Provider` is configured separately in your Next.js setup (typically in `layout.tsx` via [`@auth0/nextjs-auth0`](https://github.com/auth0/nextjs-auth0)). -```tsx layout.tsx +```tsx layout.tsx wrap lines import { Auth0ComponentProvider } from "@auth0/universal-components-react/rwa"; import "@auth0/universal-components-react/styles"; @@ -174,7 +174,7 @@ export default function RootLayout({ children }) { 2. Import Universal Components: -```tsx page.tsx +```tsx page.tsx wrap lines import { OrganizationDetailsEdit } from "@auth0/universal-components-react/rwa"; export default function OrganizationManagementPage() { @@ -190,7 +190,7 @@ export default function OrganizationManagementPage() { The `Auth0ComponentProvider` manages authentication, caching, internationalization, and toast notifications for all components. In Next.js, use proxy mode for server-side authentication. -```tsx layout.tsx +```tsx layout.tsx wrap lines Date: Wed, 10 Jun 2026 14:31:47 +0200 Subject: [PATCH 49/50] Update Stage --- .../universal-components-overview.mdx | 11 ++++++++--- .../web/auth0-component-provider.mdx | 15 ++++++++------- .../web/components/build-delegated-admin.mdx | 14 ++++++++------ .../web/components/configure-org-domains.mdx | 14 ++++++++------ .../components/edit-organization-details.mdx | 14 ++++++++------ .../web/components/sso-provider-create.mdx | 14 ++++++++------ .../web/components/sso-provider-edit.mdx | 13 +++++++------ .../web/components/sso-provider-table.mdx | 17 +++++++++-------- .../web/universal-components-style.mdx | 14 ++++++++------ .../universal-components/web/web-overview.mdx | 14 ++++++++------ 10 files changed, 80 insertions(+), 60 deletions(-) diff --git a/main/docs/get-started/universal-components/universal-components-overview.mdx b/main/docs/get-started/universal-components/universal-components-overview.mdx index 314a1c6440..3a4940ce47 100644 --- a/main/docs/get-started/universal-components/universal-components-overview.mdx +++ b/main/docs/get-started/universal-components/universal-components-overview.mdx @@ -4,9 +4,14 @@ description: Learn what Auth0 Universal Components are and choose a platform to sidebarTitle: Auth0 Universal Components --- - -Auth0 Universal Components are currently being released in stages. **Web components (My Organization)** are in Early Access. **iOS and Android components (My Account)** are in Beta. To learn more, read [Product Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + Auth0 Universal Components is a library of pre-built UI components you can use to build your identity pipeline and experience inside your web and native applications. Built on [Auth0 SDKs](/docs/libraries) with an API-first approach, Universal Components allow you to embed Auth0's services, such as Organization management and MFA enrollment, without building the UI manually or managing high-privilege backend proxies. diff --git a/main/docs/get-started/universal-components/web/auth0-component-provider.mdx b/main/docs/get-started/universal-components/web/auth0-component-provider.mdx index 6a6b57bd3e..6a13d5a4b2 100644 --- a/main/docs/get-started/universal-components/web/auth0-component-provider.mdx +++ b/main/docs/get-started/universal-components/web/auth0-component-provider.mdx @@ -4,13 +4,14 @@ description: Learn how Auth0ComponentProvider synchronizes authentication, inter sidebarTitle: Configure Auth0ComponentProvider --- - - Auth0 Universal Components is currently in Early Access. By using it, you - agree to the applicable Free Trial terms in [Okta's Master Subscription - Agreement](https://www.okta.com/agreements/). To learn more, read [Product - Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - - +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + The `Auth0ComponentProvider` is the orchestration layer for [Auth0 Universal Components](/docs/get-started/universal-components/universal-components-overview). Auth0 SDKs manage sessions and tokens, and the `Auth0ComponentProvider` translates that identity state into a functional, branded UI context. `Auth0ComponentProvider` makes sure components, such as MFA enrollment, have the necessary permissions, cached data, and styling. ## Benefits diff --git a/main/docs/get-started/universal-components/web/components/build-delegated-admin.mdx b/main/docs/get-started/universal-components/web/components/build-delegated-admin.mdx index 6ed842a62b..8fd6cac214 100644 --- a/main/docs/get-started/universal-components/web/components/build-delegated-admin.mdx +++ b/main/docs/get-started/universal-components/web/components/build-delegated-admin.mdx @@ -4,12 +4,14 @@ description: Describes how to use Universal Components to build delegated admini sidebarTitle: Build a Delegated Admin Interface --- - - Auth0 Universal Components is currently in Early Access. By using it, you - agree to the applicable Free Trial terms in [Okta's Master Subscription - Agreement](https://www.okta.com/agreements/). To learn more, read [Product - Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + Universal Components allow you to build a self-service administrative dashboard within your own application. This enables your B2B customers delegated as administrators to your [Auth0 Organization](/docs/manage-users/organizations) to manage their own branding, identity providers, and verified domains without the need to access Auth0 Dashboard or require a support team for basic administrative actions. diff --git a/main/docs/get-started/universal-components/web/components/configure-org-domains.mdx b/main/docs/get-started/universal-components/web/components/configure-org-domains.mdx index 3775cf114f..0f643884ec 100644 --- a/main/docs/get-started/universal-components/web/components/configure-org-domains.mdx +++ b/main/docs/get-started/universal-components/web/components/configure-org-domains.mdx @@ -7,12 +7,14 @@ description: Learn how to manage verified and pending Organization domains in a import Spinner from "/snippets/Spinner.jsx"; import { ComponentLoader } from "/snippets/ComponentLoader.jsx"; - - Auth0 Universal Components is currently in Early Access. By using it, you - agree to the applicable Free Trial terms in [Okta's Master Subscription - Agreement](https://www.okta.com/agreements/). To learn more, read [Product - Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + The `DomainTable` component provides a unified interface for your customers to manage their Auth0 Organization's email domain. By verifying domain ownership, Organization administrators enable critical B2B features like [Home Realm Discovery (HRD)](/docs/authenticate/enterprise-connections/self-service-enterprise-configuration/manage-self-service-enterprise-configuration#email-domain-verification-and-pre-verified-domains) and ensure users are automatically routed to the correct SSO provider based on their email suffix (for example, `user@acme.com`). diff --git a/main/docs/get-started/universal-components/web/components/edit-organization-details.mdx b/main/docs/get-started/universal-components/web/components/edit-organization-details.mdx index 15ba6d0c50..260b2b124e 100644 --- a/main/docs/get-started/universal-components/web/components/edit-organization-details.mdx +++ b/main/docs/get-started/universal-components/web/components/edit-organization-details.mdx @@ -7,12 +7,14 @@ description: Edit organization details including name, display name, branding co import Spinner from "/snippets/Spinner.jsx"; import { ComponentLoader } from "/snippets/ComponentLoader.jsx"; - - Auth0 Universal Components is currently in Early Access. By using it, you - agree to the applicable Free Trial terms in [Okta's Master Subscription - Agreement](https://www.okta.com/agreements/). To learn more, read [Product - Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + The `OrganizationDetailsEdit` component provides a unified interface to edit your [organization](/docs/manage-users/organizations) details. diff --git a/main/docs/get-started/universal-components/web/components/sso-provider-create.mdx b/main/docs/get-started/universal-components/web/components/sso-provider-create.mdx index 28a496dc63..786dc47fb2 100644 --- a/main/docs/get-started/universal-components/web/components/sso-provider-create.mdx +++ b/main/docs/get-started/universal-components/web/components/sso-provider-create.mdx @@ -7,12 +7,14 @@ description: Multi-step wizard for creating SSO providers with provider selectio import Spinner from "/snippets/Spinner.jsx"; import { ComponentLoader } from "/snippets/ComponentLoader.jsx"; - - Auth0 Universal Components is currently in Early Access. By using it, you - agree to the applicable Free Trial terms in [Okta's Master Subscription - Agreement](https://www.okta.com/agreements/). To learn more, read [Product - Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + The `SsoProviderCreate` component provides a unified interface to add new [Single Sign-On](/docs/authenticate/enterprise-connections/self-service-enterprise-configuration) providers. diff --git a/main/docs/get-started/universal-components/web/components/sso-provider-edit.mdx b/main/docs/get-started/universal-components/web/components/sso-provider-edit.mdx index 35a33bd393..3ef323d4e6 100644 --- a/main/docs/get-started/universal-components/web/components/sso-provider-edit.mdx +++ b/main/docs/get-started/universal-components/web/components/sso-provider-edit.mdx @@ -7,13 +7,14 @@ description: "Tabbed interface for editing SSO providers: SSO settings, provisio import Spinner from "/snippets/Spinner.jsx"; import { ComponentLoader } from "/snippets/ComponentLoader.jsx"; - - Auth0 Universal Components is currently in Early Access. By using it, you - agree to the applicable Free Trial terms in [Okta's Master Subscription - Agreement](https://www.okta.com/agreements/). To learn more, read [Product - Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + The `SsoProviderEdit` component provides a unified interface to edit [Single Sign-On](/docs/authenticate/enterprise-connections/self-service-enterprise-configuration) providers. - Auth0 Universal Components is currently in Early Access. By using it, you - agree to the applicable Free Trial terms in [Okta's Master Subscription - Agreement](https://www.okta.com/agreements/). To learn more, read [Product - Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - + The `SsoProviderTable` component provides a unified interface to list and configure [Single Sign-On](/docs/authenticate/enterprise-connections/self-service-enterprise-configuration) providers for your organization. -import Spinner from "/snippets/Spinner.jsx"; -import { ComponentLoader } from "/snippets/ComponentLoader.jsx"; - Auth0 Universal Components is currently in Early Access. By using it, you - agree to the applicable Free Trial terms in [Okta's Master Subscription - Agreement](https://www.okta.com/agreements/). To learn more, read [Product - Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + Auth0 Universal Components are built on a flexible design system that uses [Tailwind CSS](https://tailwindcss.com/docs/installation/using-vite) and [Radix UI primitives](https://www.radix-ui.com/primitives/docs/overview/introduction). Styling is orchestrated through the [`Auth0ComponentProvider`](/docs/get-started/universal-components/web/auth0-component-provider) to allow you to choose between high-level presets or fine-grained CSS variable overrides. diff --git a/main/docs/get-started/universal-components/web/web-overview.mdx b/main/docs/get-started/universal-components/web/web-overview.mdx index 01fc0d381a..0ef622002c 100644 --- a/main/docs/get-started/universal-components/web/web-overview.mdx +++ b/main/docs/get-started/universal-components/web/web-overview.mdx @@ -4,12 +4,14 @@ description: Learn how to install and configure Auth0 Universal Components for w sidebarTitle: Install and Configure Universal Components --- - - Auth0 Universal Components is currently in Early Access. By using it, you - agree to the applicable Free Trial terms in [Okta's Master Subscription - Agreement](https://www.okta.com/agreements/). To learn more, read [Product - Release Stages](/docs/troubleshoot/product-lifecycle/product-release-stages). - +import { ReleaseStageNotice } from "/snippets/ReleaseStageNotice.jsx" + + The Auth0 [Universal Components for Web](https://github.com/auth0/auth0-ui-components) library provides pre-built, embeddable UI for Auth0 identity flows using [React](https://react.dev/) and [Next.js](https://nextjs.org/). From 4049d03bba10f1951f650bbc3b775885a177910b Mon Sep 17 00:00:00 2001 From: Carlos Date: Wed, 10 Jun 2026 16:35:22 +0200 Subject: [PATCH 50/50] update --- .../android/components/factors/passkeys.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx index e83e8556ed..251333728a 100644 --- a/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx +++ b/main/docs/get-started/universal-components/android/components/factors/passkeys.mdx @@ -27,7 +27,7 @@ Unlike other factors, passkeys require application-side platform entitlements th To enable passkey support in the Universal Components for Android SDK: -* Configure a custom domain on your Auth0 tenant. To learn more, read [Custom Domains](/docs/customize/custom-domains). +* **Configure a custom domain on your Auth0 tenant**. To learn more, read [Custom Domains](/docs/customize/custom-domains). * **Enable passkeys on your Auth0 database connection**. To learn how to enable passkeys in your Auth0 tenant, read [Passkeys](/docs/authenticate/database-connections/passkeys/configure-passkey-policy).