+
+
+ Component
+ Customizable?
+
+
+
+
+ Text/Language
+
+ Link
+
+
+
+ Theme (colors, margin sizes, text sizes, etc)
+
+ Link
+
+
+
+ Get Ready Screen Header
+
+ Link
+
+
+
+ Get Ready Screen Photosensitivity Warning
+
+ Link
+
+
+
+ Get Ready Screen Instruction List
+
+ Link
+
+
+
+ Recording Icon
+ No
+
+
+ Countdown Timer
+ No
+
+
+ Face Match Timeout
+ No
+
+
+ Oval Placement/Size
+ No
+
+
+
+ Colors or length of colors in sequence of colored lights
+
+ No
+
+
+ Cancel Button
+ No
+
+
+
+ );
+}
diff --git a/docs/src/pages/[platform]/connected-components/liveness/customization/CustomizationTheme.tsx b/docs/src/pages/[platform]/connected-components/liveness/customization/CustomizationTheme.tsx
new file mode 100644
index 00000000000..17462ef4d1f
--- /dev/null
+++ b/docs/src/pages/[platform]/connected-components/liveness/customization/CustomizationTheme.tsx
@@ -0,0 +1,45 @@
+import React from 'react';
+import { FaceLivenessDetector } from '@aws-amplify/ui-react-liveness';
+import { Theme, ThemeProvider, useTheme } from '@aws-amplify/ui-react';
+
+export function CustomizationTheme() {
+ const { tokens } = useTheme();
+ const theme: Theme = {
+ name: 'Liveness Example Theme',
+ tokens: {
+ colors: {
+ background: {
+ primary: {
+ value: tokens.colors.neutral['90'].value,
+ },
+ secondary: {
+ value: tokens.colors.neutral['100'].value,
+ },
+ },
+ font: {
+ primary: {
+ value: tokens.colors.white.value,
+ },
+ },
+ brand: {
+ primary: {
+ '10': tokens.colors.teal['100'],
+ '80': tokens.colors.teal['40'],
+ '90': tokens.colors.teal['20'],
+ '100': tokens.colors.teal['10'],
+ },
+ },
+ },
+ },
+ };
+
+ return (
+
+ {}}
+ />
+
+ );
+}
diff --git a/docs/src/pages/[platform]/connected-components/liveness/customization/Customizationi18n.tsx b/docs/src/pages/[platform]/connected-components/liveness/customization/Customizationi18n.tsx
new file mode 100644
index 00000000000..c4476b6e53a
--- /dev/null
+++ b/docs/src/pages/[platform]/connected-components/liveness/customization/Customizationi18n.tsx
@@ -0,0 +1,50 @@
+import React from 'react';
+import { FaceLivenessDetector } from '@aws-amplify/ui-react-liveness';
+import { ToggleButtonGroup, ToggleButton } from '@aws-amplify/ui-react';
+
+const dictionary = {
+ // use default strings for english
+ en: null,
+ es: {
+ instructionsHeaderHeadingText: 'Verificación de vida',
+ instructionsHeaderBodyText:
+ 'Pasará por un proceso de verificación facial para demostrar que es una persona real.',
+ instructionListStepOneText:
+ 'Cuando aparezca un óvalo, rellena el óvalo con tu cara en 7 segundos.',
+ instructionListStepTwoText: 'Maximiza el brillo de tu pantalla.',
+ instructionListStepThreeText:
+ 'Asegúrese de que su cara no esté cubierta con gafas de sol o una máscara.',
+ instructionListStepFourText:
+ 'Muévase a un lugar bien iluminado que no esté expuesto a la luz solar directa.',
+ photosensitivyWarningHeadingText: 'Advertencia de fotosensibilidad',
+ photosensitivyWarningBodyText:
+ 'Esta verificación muestra luces de colores. Tenga cuidado si es fotosensible.',
+ instructionListHeadingText:
+ 'Siga las instrucciones para completar la verificación:',
+ goodFitCaptionText: 'Buen ajuste',
+ tooFarCaptionText: 'Demasiado lejos',
+ },
+};
+
+export function Customizationi18n() {
+ const [language, setLanguage] = React.useState('en');
+ return (
+ <>
+ setLanguage(value)}
+ >
+ En
+ Es
+
+ {}}
+ displayText={dictionary[language]}
+ />
+ >
+ );
+}
diff --git a/docs/src/pages/[platform]/connected-components/liveness/customization/customization.components.react.mdx b/docs/src/pages/[platform]/connected-components/liveness/customization/customization.components.react.mdx
new file mode 100644
index 00000000000..a3579db2d7d
--- /dev/null
+++ b/docs/src/pages/[platform]/connected-components/liveness/customization/customization.components.react.mdx
@@ -0,0 +1,20 @@
+import { Example } from '@/components/Example';
+import { CustomizationComponents } from './CustomizationComponents';
+
+## Components
+
+Liveness component allows overriding some UI components using the `components` prop.
+
+The following code snippet demonstrates how to pass in custom HTML rendering functions:
+
+- Custom Header
+- Custom Photo Sensitivity Warning
+- Custom Instruction List
+- Custom Error View
+
+```tsx file=./CustomizationComponents.tsx
+```
+
+
+
+
diff --git a/docs/src/pages/[platform]/connected-components/liveness/customization/customization.i18n.android.mdx b/docs/src/pages/[platform]/connected-components/liveness/customization/customization.i18n.android.mdx
new file mode 100644
index 00000000000..595fa08a4dc
--- /dev/null
+++ b/docs/src/pages/[platform]/connected-components/liveness/customization/customization.i18n.android.mdx
@@ -0,0 +1 @@
+The text in the FaceLivenessDetector component is defined as string resources in the component's [strings.xml file](https://github.com/aws-amplify/amplify-ui-android/blob/main/liveness/src/main/res/values/strings.xml). These values can be translated/overwritten by following the instructions [here](https://developer.android.com/guide/topics/resources/localization#creating-alternatives).
diff --git a/docs/src/pages/[platform]/connected-components/liveness/customization/customization.i18n.react.mdx b/docs/src/pages/[platform]/connected-components/liveness/customization/customization.i18n.react.mdx
new file mode 100644
index 00000000000..d4c1147097e
--- /dev/null
+++ b/docs/src/pages/[platform]/connected-components/liveness/customization/customization.i18n.react.mdx
@@ -0,0 +1,11 @@
+import { Example } from '@/components/Example';
+import { Customizationi18n } from './Customizationi18n';
+
+The text in the FaceLivenessDetector component is defined as string resources in the component's [displayText.ts file](https://github.com/aws-amplify/amplify-ui/blob/main/packages/react-liveness/src/components/FaceLivenessDetector/displayText.ts). These values can be translated/overwritten by following the example below:
+
+```tsx file=./Customizationi18n.tsx
+```
+
+
+
+
diff --git a/docs/src/pages/[platform]/connected-components/liveness/customization/customization.i18n.swift.mdx b/docs/src/pages/[platform]/connected-components/liveness/customization/customization.i18n.swift.mdx
new file mode 100644
index 00000000000..35526cdfa80
--- /dev/null
+++ b/docs/src/pages/[platform]/connected-components/liveness/customization/customization.i18n.swift.mdx
@@ -0,0 +1 @@
+The text in the FaceLivenessDetectorView component is defined as string resources in the component's [Localizable.strings file](https://github.com/aws-amplify/amplify-ui-swift-liveness/blob/main/Sources/FaceLiveness/Resources/Base.lproj/Localizable.strings). These values can be translated/overwritten by following the instructions [here](https://developer.apple.com/documentation/xcode/localization).
diff --git a/docs/src/pages/[platform]/connected-components/liveness/customization/customization.start-view.android.mdx b/docs/src/pages/[platform]/connected-components/liveness/customization/customization.start-view.android.mdx
new file mode 100644
index 00000000000..fb93e6a8f6b
--- /dev/null
+++ b/docs/src/pages/[platform]/connected-components/liveness/customization/customization.start-view.android.mdx
@@ -0,0 +1,15 @@
+The FaceLivenessDetector contains an initial (start) view with instructions and information about the liveness check for the end user. By default, the start view is shown before the liveness check. The start view can be disabled, allowing you to provide your own start view before the FaceLivenessDetector component is displayed in the app:
+
+```kotlin
+FaceLivenessDetector(
+ sessionId = ,
+ region = ,
+ disableStartView = true,
+ onComplete = {
+ Log.i("MyApp", "Liveness flow is complete")
+ },
+ onError = { error ->
+ Log.e("MyApp", "Error during Liveness flow", error)
+ }
+)
+```
diff --git a/docs/src/pages/[platform]/connected-components/liveness/customization/customization.start-view.react.mdx b/docs/src/pages/[platform]/connected-components/liveness/customization/customization.start-view.react.mdx
new file mode 100644
index 00000000000..d609382cef5
--- /dev/null
+++ b/docs/src/pages/[platform]/connected-components/liveness/customization/customization.start-view.react.mdx
@@ -0,0 +1,10 @@
+The FaceLivenessDetector contains an initial (start) view with instructions and information about the liveness check for the end user. By default, the start view is shown before the liveness check. The start view can be disabled, allowing you to provide your own start view before the FaceLivenessDetector component is displayed in the app:
+
+```jsx
+
+```
diff --git a/docs/src/pages/[platform]/connected-components/liveness/customization/customization.start-view.swift.mdx b/docs/src/pages/[platform]/connected-components/liveness/customization/customization.start-view.swift.mdx
new file mode 100644
index 00000000000..94ffa169fdc
--- /dev/null
+++ b/docs/src/pages/[platform]/connected-components/liveness/customization/customization.start-view.swift.mdx
@@ -0,0 +1,20 @@
+The FaceLivenessDetectorView contains an initial (start) view with instructions and information about the liveness check for the end user. By default, the start view is shown before the liveness check. The start view can be disabled, allowing you to provide your own start view before the FaceLivenessDetectorView component is displayed in the app:
+
+```swift
+FaceLivenessDetectorView(
+ sessionID: ,
+ region: ,
+ disableStartView: true,
+ isPresented: $isPresentingLiveness,
+ onCompletion: { result in
+ switch result {
+ case .success:
+ // ...
+ case .failure(let error):
+ // ...
+ default:
+ // ...
+ }
+ }
+)
+```
diff --git a/docs/src/pages/[platform]/connected-components/liveness/customization/customization.theming.android.mdx b/docs/src/pages/[platform]/connected-components/liveness/customization/customization.theming.android.mdx
new file mode 100644
index 00000000000..d76cbf8e9b1
--- /dev/null
+++ b/docs/src/pages/[platform]/connected-components/liveness/customization/customization.theming.android.mdx
@@ -0,0 +1,151 @@
+import { TokenItem, TokenPath, TokenMeta } from '@/components/Theming/TokenList';
+import { ColorBlock } from '@/components/Theming/TokenBlocks';
+
+## Theming
+
+The FaceLivenessDetector component supports [Material3 theming](https://developer.android.com/jetpack/compose/designsystems/material3#material-theming), allowing you to theme the FaceLivenessDetector to match the look and feel of your app. To theme the FaceLivenessDetector component according to your app's theme, wrap the FaceLivenessDetector in your app's theme:
+
+```kotlin
+@Composable
+fun MyTheme(
+ content: @Composable () -> Unit
+) {
+ MaterialTheme(
+ // Override colorScheme with custom colors
+ colorScheme = LivenessColorScheme.default(),
+ // Override shapes with custom shapes
+ shapes = MaterialTheme.shapes,
+ // Override typography with custom typography
+ typography = MaterialTheme.typography,
+ content = content
+ )
+}
+
+MyTheme {
+ FaceLivenessDetector(...)
+}
+```
+
+Amplify UI Liveness provides a Material3 color scheme for light mode and dark mode.
+
+**Light mode:**
+
+
+
+To theme the FaceLivenessDetector component using the Amplify UI Liveness color scheme, wrap the FaceLivenessDetector in a MaterialTheme and pass `LivenessColorScheme` for the theme's color scheme:
+
+```kotlin
+MaterialTheme(
+ colorScheme = LivenessColorScheme.default()
+) {
+ FaceLivenessDetector(...)
+}
+```
+
+If no theme is provided, the FaceLivenessDetector component uses the default MaterialTheme values.
diff --git a/docs/src/pages/[platform]/connected-components/liveness/customization/customization.theming.react.mdx b/docs/src/pages/[platform]/connected-components/liveness/customization/customization.theming.react.mdx
new file mode 100644
index 00000000000..536a61b9435
--- /dev/null
+++ b/docs/src/pages/[platform]/connected-components/liveness/customization/customization.theming.react.mdx
@@ -0,0 +1,36 @@
+import { Example } from '@/components/Example';
+import { CustomizationTheme } from './CustomizationTheme';
+
+## Theming
+
+### CSS styles
+
+You can customize the FaceLivenessDetector's default style by using [CSS variables](../../theming/css-variables).
+
+The example below uses a `