@aws-amplify/ui-react-liveness 3.0.5 → 3.0.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -125,9 +125,9 @@ const LivenessCameraModule = (props) => {
125
125
  setAspectRatio(videoRef.current.videoWidth / videoRef.current.videoHeight);
126
126
  }
127
127
  }, [send, videoRef, isCameraReady, isMobileScreen]);
128
- const photoSensitivtyWarning = React__default.useMemo(() => {
128
+ const photoSensitivityWarning = React__default.useMemo(() => {
129
129
  return (React__default.createElement(View, { style: { visibility: isStartView ? 'visible' : 'hidden' } },
130
- React__default.createElement(PhotosensitiveWarning, { headingText: instructionDisplayText.photosensitivyWarningHeadingText, bodyText: instructionDisplayText.photosensitivyWarningBodyText, infoText: instructionDisplayText.photosensitivyWarningInfoText })));
130
+ React__default.createElement(PhotosensitiveWarning, { bodyText: instructionDisplayText.photosensitivityWarningBodyText, headingText: instructionDisplayText.photosensitivityWarningHeadingText, infoText: instructionDisplayText.photosensitivityWarningInfoText, labelText: instructionDisplayText.photosensitivityWarningLabelText })));
131
131
  }, [PhotosensitiveWarning, instructionDisplayText, isStartView]);
132
132
  const handleMediaPlay = () => {
133
133
  setIsCameraReady(true);
@@ -161,7 +161,7 @@ const LivenessCameraModule = (props) => {
161
161
  }
162
162
  const isRecordingOnMobile = isMobileScreen && !isStartView && !isWaitingForCamera && isRecording;
163
163
  return (React__default.createElement(React__default.Fragment, null,
164
- photoSensitivtyWarning,
164
+ photoSensitivityWarning,
165
165
  React__default.createElement(Flex, { className: classNames(LivenessClassNames.CameraModule, isRecordingOnMobile && `${LivenessClassNames.CameraModule}--mobile`), "data-testid": testId, gap: "zero" },
166
166
  !isCameraReady && centeredLoader,
167
167
  React__default.createElement(View, { as: "canvas", ref: freshnessColorRef, className: LivenessClassNames.FreshnessCanvas, hidden: true }),
@@ -15,24 +15,15 @@ const defaultErrorDisplayText = {
15
15
  tryAgainText: 'Try again',
16
16
  };
17
17
  const defaultLivenessDisplayText = {
18
- hintCenterFaceText: 'Center your face',
19
- startScreenBeginCheckText: 'Start video check',
20
- photosensitivyWarningHeadingText: 'Photosensitivity warning',
21
- photosensitivyWarningBodyText: 'This check flashes different colors. Use caution if you are photosensitive.',
22
- photosensitivyWarningInfoText: 'Some people may experience may experience epileptic seizures when exposed to colored lights. Use caution if you, or anyone in your family, have an epileptic condition.',
23
- goodFitCaptionText: 'Good fit',
24
- goodFitAltText: "Ilustration of a person's face, perfectly fitting inside of an oval.",
25
- tooFarCaptionText: 'Too far',
26
- tooFarAltText: "Illustration of a person's face inside of an oval; there is a gap between the perimeter of the face and the boundaries of the oval.",
27
18
  cameraMinSpecificationsHeadingText: 'Camera does not meet minimum specifications',
28
19
  cameraMinSpecificationsMessageText: 'Camera must support at least 320*240 resolution and 15 frames per second.',
29
20
  cameraNotFoundHeadingText: 'Camera is not accessible.',
30
21
  cameraNotFoundMessageText: 'Check that a camera is connected and there is not another application using the camera. You may have to go into settings to grant camera permissions and close out all instances of your browser and retry.',
31
- retryCameraPermissionsText: 'Retry',
32
- waitingCameraPermissionText: 'Waiting for you to allow camera permission.',
33
22
  a11yVideoLabelText: 'Webcam for liveness check',
34
23
  cancelLivenessCheckText: 'Cancel Liveness check',
35
- recordingIndicatorText: 'Rec',
24
+ goodFitCaptionText: 'Good fit',
25
+ goodFitAltText: "Ilustration of a person's face, perfectly fitting inside of an oval.",
26
+ hintCenterFaceText: 'Center your face',
36
27
  hintMoveFaceFrontOfCameraText: 'Move face in front of camera',
37
28
  hintTooManyFacesText: 'Ensure only one face is in front of camera',
38
29
  hintFaceDetectedText: 'Face detected',
@@ -45,6 +36,20 @@ const defaultLivenessDisplayText = {
45
36
  hintIlluminationTooDarkText: 'Move to brighter area',
46
37
  hintIlluminationNormalText: 'Lighting conditions normal',
47
38
  hintHoldFaceForFreshnessText: 'Hold still',
39
+ photosensitivityWarningBodyText: 'This check flashes different colors. Use caution if you are photosensitive.',
40
+ photosensitivityWarningHeadingText: 'Photosensitivity warning',
41
+ photosensitivityWarningInfoText: 'Some people may experience epileptic seizures when exposed to colored lights. Use caution if you, or anyone in your family, have an epileptic condition.',
42
+ photosensitivityWarningLabelText: 'More information about photosensitivity',
43
+ photosensitivyWarningBodyText: 'This check flashes different colors. Use caution if you are photosensitive.',
44
+ photosensitivyWarningHeadingText: 'Photosensitivity warning',
45
+ photosensitivyWarningInfoText: 'Some people may experience epileptic seizures when exposed to colored lights. Use caution if you, or anyone in your family, have an epileptic condition.',
46
+ photosensitivyWarningLabelText: 'More information about photosensitivity',
47
+ retryCameraPermissionsText: 'Retry',
48
+ recordingIndicatorText: 'Rec',
49
+ startScreenBeginCheckText: 'Start video check',
50
+ tooFarCaptionText: 'Too far',
51
+ tooFarAltText: "Illustration of a person's face inside of an oval; there is a gap between the perimeter of the face and the boundaries of the oval.",
52
+ waitingCameraPermissionText: 'Waiting for you to allow camera permission.',
48
53
  ...defaultErrorDisplayText,
49
54
  };
50
55
 
@@ -22,12 +22,12 @@ import { LivenessClassNames } from '../types/classNames.mjs';
22
22
  import { RecordingIcon } from './RecordingIcon.mjs';
23
23
  import { LivenessIconWithPopover } from './LivenessIconWithPopover.mjs';
24
24
 
25
- const DefaultPhotosensitiveWarning = ({ headingText, bodyText, infoText, }) => {
25
+ const DefaultPhotosensitiveWarning = ({ bodyText, headingText, infoText, labelText, }) => {
26
26
  return (React__default.createElement(Flex, { className: `${ComponentClassName.Alert} ${LivenessClassNames.StartScreenWarning}`, style: { zIndex: '3' } },
27
27
  React__default.createElement(View, { flex: "1" },
28
28
  React__default.createElement(View, { className: ComponentClassName.AlertHeading }, headingText),
29
29
  React__default.createElement(View, { className: ComponentClassName.AlertBody }, bodyText)),
30
- React__default.createElement(LivenessIconWithPopover, null, infoText)));
30
+ React__default.createElement(LivenessIconWithPopover, { labelText: labelText, headingText: headingText }, infoText)));
31
31
  };
32
32
  const DefaultRecordingIcon = ({ recordingIndicatorText, }) => {
33
33
  return (React__default.createElement(View, { className: LivenessClassNames.RecordingIconContainer },
@@ -51,8 +51,8 @@ const renderToastErrorModal = (props) => {
51
51
  return (React__default.createElement(React__default.Fragment, null,
52
52
  React__default.createElement(Flex, { className: LivenessClassNames.ErrorModal },
53
53
  React__default.createElement(AlertIcon, { ariaHidden: true, variation: "error" }),
54
- React__default.createElement(Text, { className: LivenessClassNames.ErrorModalHeading }, heading)),
55
- message));
54
+ React__default.createElement(Text, { className: LivenessClassNames.ErrorModalHeading, id: "amplify-liveness-error-heading" }, heading)),
55
+ React__default.createElement(Text, { id: "amplify-liveness-error-message" }, message)));
56
56
  };
57
57
  const renderErrorModal = ({ errorState, overrideErrorDisplayText, }) => {
58
58
  const displayText = {
@@ -79,7 +79,7 @@ const FaceLivenessErrorModal = (props) => {
79
79
  };
80
80
  const { tryAgainText } = displayText;
81
81
  return (React__default.createElement(Overlay, { className: LivenessClassNames.OpaqueOverlay },
82
- React__default.createElement(Toast, null,
82
+ React__default.createElement(Toast, { "aria-labelledby": "amplify-liveness-error-heading", "aria-describedby": "amplify-liveness-error-message", role: "alertdialog" },
83
83
  children,
84
84
  React__default.createElement(Flex, { justifyContent: "center" },
85
85
  React__default.createElement(Button, { variation: "primary", type: "button", onClick: onRetry }, tryAgainText)))));
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { Flex, Loader, View } from '@aws-amplify/ui-react';
2
+ import { View } from '@aws-amplify/ui-react';
3
3
  import '../service/machine/index.mjs';
4
4
  import { FaceMatchState, IlluminationState } from '../service/types/liveness.mjs';
5
5
  import '@tensorflow/tfjs-core';
@@ -18,13 +18,17 @@ import { useLivenessActor } from '../hooks/useLivenessActor.mjs';
18
18
  import { createLivenessSelector, useLivenessSelector } from '../hooks/useLivenessSelector.mjs';
19
19
  import '@aws-amplify/ui';
20
20
  import { Toast } from './Toast.mjs';
21
- import { LivenessClassNames } from '../types/classNames.mjs';
21
+ import { ToastWithLoader } from './ToastWithLoader.mjs';
22
22
 
23
23
  const selectErrorState = createLivenessSelector((state) => state.context.errorState);
24
24
  const selectFaceMatchState = createLivenessSelector((state) => state.context.faceMatchAssociatedParams.faceMatchState);
25
25
  const selectIlluminationState = createLivenessSelector((state) => state.context.faceMatchAssociatedParams.illuminationState);
26
26
  const selectIsFaceFarEnoughBeforeRecording = createLivenessSelector((state) => state.context.isFaceFarEnoughBeforeRecording);
27
27
  const selectFaceMatchStateBeforeStart = createLivenessSelector((state) => state.context.faceMatchStateBeforeStart);
28
+ const defaultToast = (text, isInitial = false) => {
29
+ return (React.createElement(Toast, { size: "large", variation: "primary", isInitial: isInitial },
30
+ React.createElement(View, { "aria-live": "polite", "aria-label": text }, text)));
31
+ };
28
32
  const Hint = ({ hintDisplayText }) => {
29
33
  const [state] = useLivenessActor();
30
34
  // NOTE: Do not change order of these selectors as the unit tests depend on this order
@@ -59,7 +63,7 @@ const Hint = ({ hintDisplayText }) => {
59
63
  };
60
64
  const getInstructionContent = () => {
61
65
  if (isStartView) {
62
- return (React.createElement(Toast, { size: "large", variation: "primary", isInitial: true }, hintDisplayText.hintCenterFaceText));
66
+ return defaultToast(hintDisplayText.hintCenterFaceText, true);
63
67
  }
64
68
  if (errorState ?? (isCheckFailed || isCheckSuccessful)) {
65
69
  return;
@@ -67,33 +71,27 @@ const Hint = ({ hintDisplayText }) => {
67
71
  if (!isRecording) {
68
72
  if (isCheckFaceDetectedBeforeStart) {
69
73
  if (faceMatchStateBeforeStart === FaceMatchState.TOO_MANY) {
70
- return (React.createElement(Toast, { size: "large", variation: "primary" }, FaceMatchStateStringMap[faceMatchStateBeforeStart]));
74
+ return defaultToast(FaceMatchStateStringMap[faceMatchStateBeforeStart]);
71
75
  }
72
- return (React.createElement(Toast, { size: "large", variation: "primary" }, hintDisplayText.hintMoveFaceFrontOfCameraText));
76
+ return defaultToast(hintDisplayText.hintMoveFaceFrontOfCameraText);
73
77
  }
74
78
  // Specifically checking for false here because initially the value is undefined and we do not want to show the instruction
75
79
  if (isCheckFaceDistanceBeforeRecording &&
76
80
  isFaceFarEnoughBeforeRecordingState === false) {
77
- return (React.createElement(Toast, { size: "large", variation: "primary" }, hintDisplayText.hintTooCloseText));
81
+ return defaultToast(hintDisplayText.hintTooCloseText);
78
82
  }
79
83
  if (isNotRecording) {
80
- return (React.createElement(Toast, null,
81
- React.createElement(Flex, { className: LivenessClassNames.HintText },
82
- React.createElement(Loader, null),
83
- React.createElement(View, null, hintDisplayText.hintConnectingText))));
84
+ return (React.createElement(ToastWithLoader, { displayText: hintDisplayText.hintConnectingText }));
84
85
  }
85
86
  if (isUploading) {
86
- return (React.createElement(Toast, null,
87
- React.createElement(Flex, { className: LivenessClassNames.HintText },
88
- React.createElement(Loader, null),
89
- React.createElement(View, null, hintDisplayText.hintVerifyingText))));
87
+ return (React.createElement(ToastWithLoader, { displayText: hintDisplayText.hintVerifyingText }));
90
88
  }
91
89
  if (illuminationState && illuminationState !== IlluminationState.NORMAL) {
92
- return (React.createElement(Toast, { size: "large", variation: "primary" }, IlluminationStateStringMap[illuminationState]));
90
+ return defaultToast(IlluminationStateStringMap[illuminationState]);
93
91
  }
94
92
  }
95
93
  if (isFlashingFreshness) {
96
- return (React.createElement(Toast, { size: "large", variation: "primary" }, hintDisplayText.hintHoldFaceForFreshnessText));
94
+ return defaultToast(hintDisplayText.hintHoldFaceForFreshnessText);
97
95
  }
98
96
  if (isRecording && !isFlashingFreshness) {
99
97
  // During face matching, we want to only show the TOO_CLOSE or
@@ -105,7 +103,8 @@ const Hint = ({ hintDisplayText }) => {
105
103
  faceMatchState === FaceMatchState.MATCHED) {
106
104
  resultHintString = FaceMatchStateStringMap[faceMatchState];
107
105
  }
108
- return (React.createElement(Toast, { size: "large", variation: faceMatchState === FaceMatchState.TOO_CLOSE ? 'error' : 'primary' }, resultHintString));
106
+ return (React.createElement(Toast, { size: "large", variation: faceMatchState === FaceMatchState.TOO_CLOSE ? 'error' : 'primary' },
107
+ React.createElement(View, { "aria-live": "polite", "aria-label": resultHintString }, resultHintString)));
109
108
  }
110
109
  return null;
111
110
  };
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { Flex } from '@aws-amplify/ui-react';
2
+ import { Button, Flex } from '@aws-amplify/ui-react';
3
3
  import { useThemeBreakpoint, AlertIcon } from '@aws-amplify/ui-react/internal';
4
4
  import { LivenessClassNames } from '../types/classNames.mjs';
5
5
 
@@ -7,7 +7,7 @@ import { LivenessClassNames } from '../types/classNames.mjs';
7
7
  * Copied from src/primitives/Alert/AlertIcon.tsx because we want to re-use the icon but it is not currently expored by AlertIcon.
8
8
  * We currently don't want to make a change to the AlertIcon primitive itself and may expose the icon in the future but for now so as not to introduce cross component dependencies we have duplicated it.
9
9
  */
10
- const LivenessIconWithPopover = ({ children }) => {
10
+ const LivenessIconWithPopover = ({ children, headingText, labelText }) => {
11
11
  const breakpoint = useThemeBreakpoint();
12
12
  const [shouldShowPopover, setShouldShowPopover] = React.useState(false);
13
13
  const wrapperRef = React.useRef(null);
@@ -25,12 +25,13 @@ const LivenessIconWithPopover = ({ children }) => {
25
25
  document.removeEventListener('mousedown', handleClickOutside);
26
26
  };
27
27
  }, [wrapperRef, shouldShowPopover]);
28
- return (React.createElement(Flex, { className: LivenessClassNames.Popover, onClick: () => setShouldShowPopover(!shouldShowPopover), ref: wrapperRef, testId: "popover-icon" },
29
- React.createElement(AlertIcon, { ariaHidden: true, variation: "info" }),
28
+ return (React.createElement("div", { className: LivenessClassNames.Popover, ref: wrapperRef },
29
+ React.createElement(Button, { "aria-controls": "photosensitivity-description", "aria-expanded": shouldShowPopover, role: "alertdialog", "aria-label": labelText, "aria-describedby": "photosensitivity-description", colorTheme: "info", id: "popover-button", onClick: () => setShouldShowPopover(!shouldShowPopover), testId: "popover-icon" },
30
+ React.createElement(AlertIcon, { ariaHidden: true, variation: "info" })),
30
31
  shouldShowPopover && (React.createElement(React.Fragment, null,
31
32
  React.createElement(Flex, { className: LivenessClassNames.PopoverAnchor }),
32
33
  React.createElement(Flex, { className: LivenessClassNames.PopoverAnchorSecondary }),
33
- React.createElement(Flex, { className: LivenessClassNames.PopoverContainer, left: isMobileScreen ? -190 : -108, "data-testid": "popover-text" }, children)))));
34
+ React.createElement(Flex, { "aria-hidden": !shouldShowPopover, "aria-label": headingText, className: LivenessClassNames.PopoverContainer, "data-testid": "popover-text", id: "photosensitivity-description", left: isMobileScreen ? -190 : -108, role: "alertdialog" }, children)))));
34
35
  };
35
36
  LivenessIconWithPopover.displayName = 'LivenessIconWithPopover';
36
37
 
@@ -0,0 +1,13 @@
1
+ import * as React from 'react';
2
+ import { Flex, Loader, View } from '@aws-amplify/ui-react';
3
+ import { LivenessClassNames } from '../types/classNames.mjs';
4
+ import { Toast } from './Toast.mjs';
5
+
6
+ const ToastWithLoader = ({ displayText, labelText, }) => {
7
+ return (React.createElement(Toast, { "aria-live": "polite", "aria-label": labelText ?? displayText },
8
+ React.createElement(Flex, { className: LivenessClassNames.HintText },
9
+ React.createElement(Loader, null),
10
+ React.createElement(View, null, displayText))));
11
+ };
12
+
13
+ export { ToastWithLoader };
@@ -12,7 +12,7 @@ function getDisplayText(overrideDisplayText) {
12
12
  ...defaultLivenessDisplayText,
13
13
  ...overrideDisplayText,
14
14
  };
15
- const { photosensitivyWarningHeadingText, photosensitivyWarningBodyText, photosensitivyWarningInfoText, goodFitCaptionText, goodFitAltText, tooFarCaptionText, tooFarAltText, cameraMinSpecificationsHeadingText, cameraMinSpecificationsMessageText, cameraNotFoundHeadingText, cameraNotFoundMessageText, retryCameraPermissionsText, waitingCameraPermissionText, a11yVideoLabelText, cancelLivenessCheckText, recordingIndicatorText, hintMoveFaceFrontOfCameraText, hintTooManyFacesText, hintFaceDetectedText, hintCanNotIdentifyText, hintTooCloseText, hintTooFarText, hintConnectingText, hintVerifyingText, hintIlluminationTooBrightText, hintIlluminationTooDarkText, hintIlluminationNormalText, hintHoldFaceForFreshnessText, timeoutHeaderText, timeoutMessageText, faceDistanceHeaderText, faceDistanceMessageText, multipleFacesHeaderText, multipleFacesMessageText, clientHeaderText, clientMessageText, serverHeaderText, serverMessageText, landscapeHeaderText, landscapeMessageText, portraitMessageText, tryAgainText, startScreenBeginCheckText, hintCenterFaceText, } = displayText;
15
+ const { a11yVideoLabelText, cameraMinSpecificationsHeadingText, cameraMinSpecificationsMessageText, cameraNotFoundHeadingText, cameraNotFoundMessageText, cancelLivenessCheckText, clientHeaderText, clientMessageText, hintCanNotIdentifyText, hintCenterFaceText, hintConnectingText, hintFaceDetectedText, hintHoldFaceForFreshnessText, hintIlluminationNormalText, hintIlluminationTooBrightText, hintIlluminationTooDarkText, hintMoveFaceFrontOfCameraText, hintTooManyFacesText, hintTooCloseText, hintTooFarText, hintVerifyingText, faceDistanceHeaderText, faceDistanceMessageText, goodFitCaptionText, goodFitAltText, landscapeHeaderText, landscapeMessageText, multipleFacesHeaderText, multipleFacesMessageText, photosensitivityWarningBodyText, photosensitivityWarningHeadingText, photosensitivityWarningInfoText, photosensitivityWarningLabelText, photosensitivyWarningBodyText, photosensitivyWarningHeadingText, photosensitivyWarningInfoText, photosensitivyWarningLabelText, portraitMessageText, retryCameraPermissionsText, recordingIndicatorText, serverHeaderText, serverMessageText, startScreenBeginCheckText, timeoutHeaderText, timeoutMessageText, tooFarCaptionText, tooFarAltText, tryAgainText, waitingCameraPermissionText, } = displayText;
16
16
  const hintDisplayText = {
17
17
  hintMoveFaceFrontOfCameraText,
18
18
  hintTooManyFacesText,
@@ -38,9 +38,14 @@ function getDisplayText(overrideDisplayText) {
38
38
  a11yVideoLabelText,
39
39
  };
40
40
  const instructionDisplayText = {
41
- photosensitivyWarningHeadingText,
41
+ photosensitivityWarningBodyText,
42
+ photosensitivityWarningHeadingText,
43
+ photosensitivityWarningInfoText,
44
+ photosensitivityWarningLabelText,
42
45
  photosensitivyWarningBodyText,
46
+ photosensitivyWarningHeadingText,
43
47
  photosensitivyWarningInfoText,
48
+ photosensitivyWarningLabelText,
44
49
  goodFitCaptionText,
45
50
  goodFitAltText,
46
51
  tooFarCaptionText,
@@ -1,3 +1,3 @@
1
- const VERSION = '3.0.5';
1
+ const VERSION = '3.0.7';
2
2
 
3
3
  export { VERSION };
package/dist/index.js CHANGED
@@ -771,7 +771,7 @@ class VideoRecorder {
771
771
  }
772
772
  }
773
773
 
774
- const VERSION = '3.0.5';
774
+ const VERSION = '3.0.7';
775
775
 
776
776
  const BASE_USER_AGENT = `ui-react-liveness/${VERSION}`;
777
777
  const getLivenessUserAgent = () => {
@@ -2530,11 +2530,22 @@ const Toast = ({ variation = 'default', size = 'medium', children, isInitial = f
2530
2530
  React__namespace.createElement(uiReact.Flex, { className: LivenessClassNames.ToastMessage, ...(isInitial ? { color: tokens.colors.font.primary } : {}) }, children))));
2531
2531
  };
2532
2532
 
2533
+ const ToastWithLoader = ({ displayText, labelText, }) => {
2534
+ return (React__namespace.createElement(Toast, { "aria-live": "polite", "aria-label": labelText ?? displayText },
2535
+ React__namespace.createElement(uiReact.Flex, { className: LivenessClassNames.HintText },
2536
+ React__namespace.createElement(uiReact.Loader, null),
2537
+ React__namespace.createElement(uiReact.View, null, displayText))));
2538
+ };
2539
+
2533
2540
  const selectErrorState = createLivenessSelector((state) => state.context.errorState);
2534
2541
  const selectFaceMatchState$1 = createLivenessSelector((state) => state.context.faceMatchAssociatedParams.faceMatchState);
2535
2542
  const selectIlluminationState = createLivenessSelector((state) => state.context.faceMatchAssociatedParams.illuminationState);
2536
2543
  const selectIsFaceFarEnoughBeforeRecording = createLivenessSelector((state) => state.context.isFaceFarEnoughBeforeRecording);
2537
2544
  const selectFaceMatchStateBeforeStart = createLivenessSelector((state) => state.context.faceMatchStateBeforeStart);
2545
+ const defaultToast = (text, isInitial = false) => {
2546
+ return (React__namespace.createElement(Toast, { size: "large", variation: "primary", isInitial: isInitial },
2547
+ React__namespace.createElement(uiReact.View, { "aria-live": "polite", "aria-label": text }, text)));
2548
+ };
2538
2549
  const Hint = ({ hintDisplayText }) => {
2539
2550
  const [state] = useLivenessActor();
2540
2551
  // NOTE: Do not change order of these selectors as the unit tests depend on this order
@@ -2569,7 +2580,7 @@ const Hint = ({ hintDisplayText }) => {
2569
2580
  };
2570
2581
  const getInstructionContent = () => {
2571
2582
  if (isStartView) {
2572
- return (React__namespace.createElement(Toast, { size: "large", variation: "primary", isInitial: true }, hintDisplayText.hintCenterFaceText));
2583
+ return defaultToast(hintDisplayText.hintCenterFaceText, true);
2573
2584
  }
2574
2585
  if (errorState ?? (isCheckFailed || isCheckSuccessful)) {
2575
2586
  return;
@@ -2577,33 +2588,27 @@ const Hint = ({ hintDisplayText }) => {
2577
2588
  if (!isRecording) {
2578
2589
  if (isCheckFaceDetectedBeforeStart) {
2579
2590
  if (faceMatchStateBeforeStart === FaceMatchState.TOO_MANY) {
2580
- return (React__namespace.createElement(Toast, { size: "large", variation: "primary" }, FaceMatchStateStringMap[faceMatchStateBeforeStart]));
2591
+ return defaultToast(FaceMatchStateStringMap[faceMatchStateBeforeStart]);
2581
2592
  }
2582
- return (React__namespace.createElement(Toast, { size: "large", variation: "primary" }, hintDisplayText.hintMoveFaceFrontOfCameraText));
2593
+ return defaultToast(hintDisplayText.hintMoveFaceFrontOfCameraText);
2583
2594
  }
2584
2595
  // Specifically checking for false here because initially the value is undefined and we do not want to show the instruction
2585
2596
  if (isCheckFaceDistanceBeforeRecording &&
2586
2597
  isFaceFarEnoughBeforeRecordingState === false) {
2587
- return (React__namespace.createElement(Toast, { size: "large", variation: "primary" }, hintDisplayText.hintTooCloseText));
2598
+ return defaultToast(hintDisplayText.hintTooCloseText);
2588
2599
  }
2589
2600
  if (isNotRecording) {
2590
- return (React__namespace.createElement(Toast, null,
2591
- React__namespace.createElement(uiReact.Flex, { className: LivenessClassNames.HintText },
2592
- React__namespace.createElement(uiReact.Loader, null),
2593
- React__namespace.createElement(uiReact.View, null, hintDisplayText.hintConnectingText))));
2601
+ return (React__namespace.createElement(ToastWithLoader, { displayText: hintDisplayText.hintConnectingText }));
2594
2602
  }
2595
2603
  if (isUploading) {
2596
- return (React__namespace.createElement(Toast, null,
2597
- React__namespace.createElement(uiReact.Flex, { className: LivenessClassNames.HintText },
2598
- React__namespace.createElement(uiReact.Loader, null),
2599
- React__namespace.createElement(uiReact.View, null, hintDisplayText.hintVerifyingText))));
2604
+ return (React__namespace.createElement(ToastWithLoader, { displayText: hintDisplayText.hintVerifyingText }));
2600
2605
  }
2601
2606
  if (illuminationState && illuminationState !== IlluminationState.NORMAL) {
2602
- return (React__namespace.createElement(Toast, { size: "large", variation: "primary" }, IlluminationStateStringMap[illuminationState]));
2607
+ return defaultToast(IlluminationStateStringMap[illuminationState]);
2603
2608
  }
2604
2609
  }
2605
2610
  if (isFlashingFreshness) {
2606
- return (React__namespace.createElement(Toast, { size: "large", variation: "primary" }, hintDisplayText.hintHoldFaceForFreshnessText));
2611
+ return defaultToast(hintDisplayText.hintHoldFaceForFreshnessText);
2607
2612
  }
2608
2613
  if (isRecording && !isFlashingFreshness) {
2609
2614
  // During face matching, we want to only show the TOO_CLOSE or
@@ -2615,7 +2620,8 @@ const Hint = ({ hintDisplayText }) => {
2615
2620
  faceMatchState === FaceMatchState.MATCHED) {
2616
2621
  resultHintString = FaceMatchStateStringMap[faceMatchState];
2617
2622
  }
2618
- return (React__namespace.createElement(Toast, { size: "large", variation: faceMatchState === FaceMatchState.TOO_CLOSE ? 'error' : 'primary' }, resultHintString));
2623
+ return (React__namespace.createElement(Toast, { size: "large", variation: faceMatchState === FaceMatchState.TOO_CLOSE ? 'error' : 'primary' },
2624
+ React__namespace.createElement(uiReact.View, { "aria-live": "polite", "aria-label": resultHintString }, resultHintString)));
2619
2625
  }
2620
2626
  return null;
2621
2627
  };
@@ -2672,24 +2678,15 @@ const defaultErrorDisplayText = {
2672
2678
  tryAgainText: 'Try again',
2673
2679
  };
2674
2680
  const defaultLivenessDisplayText = {
2675
- hintCenterFaceText: 'Center your face',
2676
- startScreenBeginCheckText: 'Start video check',
2677
- photosensitivyWarningHeadingText: 'Photosensitivity warning',
2678
- photosensitivyWarningBodyText: 'This check flashes different colors. Use caution if you are photosensitive.',
2679
- photosensitivyWarningInfoText: 'Some people may experience may experience epileptic seizures when exposed to colored lights. Use caution if you, or anyone in your family, have an epileptic condition.',
2680
- goodFitCaptionText: 'Good fit',
2681
- goodFitAltText: "Ilustration of a person's face, perfectly fitting inside of an oval.",
2682
- tooFarCaptionText: 'Too far',
2683
- tooFarAltText: "Illustration of a person's face inside of an oval; there is a gap between the perimeter of the face and the boundaries of the oval.",
2684
2681
  cameraMinSpecificationsHeadingText: 'Camera does not meet minimum specifications',
2685
2682
  cameraMinSpecificationsMessageText: 'Camera must support at least 320*240 resolution and 15 frames per second.',
2686
2683
  cameraNotFoundHeadingText: 'Camera is not accessible.',
2687
2684
  cameraNotFoundMessageText: 'Check that a camera is connected and there is not another application using the camera. You may have to go into settings to grant camera permissions and close out all instances of your browser and retry.',
2688
- retryCameraPermissionsText: 'Retry',
2689
- waitingCameraPermissionText: 'Waiting for you to allow camera permission.',
2690
2685
  a11yVideoLabelText: 'Webcam for liveness check',
2691
2686
  cancelLivenessCheckText: 'Cancel Liveness check',
2692
- recordingIndicatorText: 'Rec',
2687
+ goodFitCaptionText: 'Good fit',
2688
+ goodFitAltText: "Ilustration of a person's face, perfectly fitting inside of an oval.",
2689
+ hintCenterFaceText: 'Center your face',
2693
2690
  hintMoveFaceFrontOfCameraText: 'Move face in front of camera',
2694
2691
  hintTooManyFacesText: 'Ensure only one face is in front of camera',
2695
2692
  hintFaceDetectedText: 'Face detected',
@@ -2702,6 +2699,20 @@ const defaultLivenessDisplayText = {
2702
2699
  hintIlluminationTooDarkText: 'Move to brighter area',
2703
2700
  hintIlluminationNormalText: 'Lighting conditions normal',
2704
2701
  hintHoldFaceForFreshnessText: 'Hold still',
2702
+ photosensitivityWarningBodyText: 'This check flashes different colors. Use caution if you are photosensitive.',
2703
+ photosensitivityWarningHeadingText: 'Photosensitivity warning',
2704
+ photosensitivityWarningInfoText: 'Some people may experience epileptic seizures when exposed to colored lights. Use caution if you, or anyone in your family, have an epileptic condition.',
2705
+ photosensitivityWarningLabelText: 'More information about photosensitivity',
2706
+ photosensitivyWarningBodyText: 'This check flashes different colors. Use caution if you are photosensitive.',
2707
+ photosensitivyWarningHeadingText: 'Photosensitivity warning',
2708
+ photosensitivyWarningInfoText: 'Some people may experience epileptic seizures when exposed to colored lights. Use caution if you, or anyone in your family, have an epileptic condition.',
2709
+ photosensitivyWarningLabelText: 'More information about photosensitivity',
2710
+ retryCameraPermissionsText: 'Retry',
2711
+ recordingIndicatorText: 'Rec',
2712
+ startScreenBeginCheckText: 'Start video check',
2713
+ tooFarCaptionText: 'Too far',
2714
+ tooFarAltText: "Illustration of a person's face inside of an oval; there is a gap between the perimeter of the face and the boundaries of the oval.",
2715
+ waitingCameraPermissionText: 'Waiting for you to allow camera permission.',
2705
2716
  ...defaultErrorDisplayText,
2706
2717
  };
2707
2718
 
@@ -2735,8 +2746,8 @@ const renderToastErrorModal = (props) => {
2735
2746
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
2736
2747
  React__default["default"].createElement(uiReact.Flex, { className: LivenessClassNames.ErrorModal },
2737
2748
  React__default["default"].createElement(internal.AlertIcon, { ariaHidden: true, variation: "error" }),
2738
- React__default["default"].createElement(uiReact.Text, { className: LivenessClassNames.ErrorModalHeading }, heading)),
2739
- message));
2749
+ React__default["default"].createElement(uiReact.Text, { className: LivenessClassNames.ErrorModalHeading, id: "amplify-liveness-error-heading" }, heading)),
2750
+ React__default["default"].createElement(uiReact.Text, { id: "amplify-liveness-error-message" }, message)));
2740
2751
  };
2741
2752
  const renderErrorModal = ({ errorState, overrideErrorDisplayText, }) => {
2742
2753
  const displayText = {
@@ -2763,7 +2774,7 @@ const FaceLivenessErrorModal = (props) => {
2763
2774
  };
2764
2775
  const { tryAgainText } = displayText;
2765
2776
  return (React__default["default"].createElement(Overlay, { className: LivenessClassNames.OpaqueOverlay },
2766
- React__default["default"].createElement(Toast, null,
2777
+ React__default["default"].createElement(Toast, { "aria-labelledby": "amplify-liveness-error-heading", "aria-describedby": "amplify-liveness-error-message", role: "alertdialog" },
2767
2778
  children,
2768
2779
  React__default["default"].createElement(uiReact.Flex, { justifyContent: "center" },
2769
2780
  React__default["default"].createElement(uiReact.Button, { variation: "primary", type: "button", onClick: onRetry }, tryAgainText)))));
@@ -2773,7 +2784,7 @@ const FaceLivenessErrorModal = (props) => {
2773
2784
  * Copied from src/primitives/Alert/AlertIcon.tsx because we want to re-use the icon but it is not currently expored by AlertIcon.
2774
2785
  * We currently don't want to make a change to the AlertIcon primitive itself and may expose the icon in the future but for now so as not to introduce cross component dependencies we have duplicated it.
2775
2786
  */
2776
- const LivenessIconWithPopover = ({ children }) => {
2787
+ const LivenessIconWithPopover = ({ children, headingText, labelText }) => {
2777
2788
  const breakpoint = internal.useThemeBreakpoint();
2778
2789
  const [shouldShowPopover, setShouldShowPopover] = React__namespace.useState(false);
2779
2790
  const wrapperRef = React__namespace.useRef(null);
@@ -2791,21 +2802,22 @@ const LivenessIconWithPopover = ({ children }) => {
2791
2802
  document.removeEventListener('mousedown', handleClickOutside);
2792
2803
  };
2793
2804
  }, [wrapperRef, shouldShowPopover]);
2794
- return (React__namespace.createElement(uiReact.Flex, { className: LivenessClassNames.Popover, onClick: () => setShouldShowPopover(!shouldShowPopover), ref: wrapperRef, testId: "popover-icon" },
2795
- React__namespace.createElement(internal.AlertIcon, { ariaHidden: true, variation: "info" }),
2805
+ return (React__namespace.createElement("div", { className: LivenessClassNames.Popover, ref: wrapperRef },
2806
+ React__namespace.createElement(uiReact.Button, { "aria-controls": "photosensitivity-description", "aria-expanded": shouldShowPopover, role: "alertdialog", "aria-label": labelText, "aria-describedby": "photosensitivity-description", colorTheme: "info", id: "popover-button", onClick: () => setShouldShowPopover(!shouldShowPopover), testId: "popover-icon" },
2807
+ React__namespace.createElement(internal.AlertIcon, { ariaHidden: true, variation: "info" })),
2796
2808
  shouldShowPopover && (React__namespace.createElement(React__namespace.Fragment, null,
2797
2809
  React__namespace.createElement(uiReact.Flex, { className: LivenessClassNames.PopoverAnchor }),
2798
2810
  React__namespace.createElement(uiReact.Flex, { className: LivenessClassNames.PopoverAnchorSecondary }),
2799
- React__namespace.createElement(uiReact.Flex, { className: LivenessClassNames.PopoverContainer, left: isMobileScreen ? -190 : -108, "data-testid": "popover-text" }, children)))));
2811
+ React__namespace.createElement(uiReact.Flex, { "aria-hidden": !shouldShowPopover, "aria-label": headingText, className: LivenessClassNames.PopoverContainer, "data-testid": "popover-text", id: "photosensitivity-description", left: isMobileScreen ? -190 : -108, role: "alertdialog" }, children)))));
2800
2812
  };
2801
2813
  LivenessIconWithPopover.displayName = 'LivenessIconWithPopover';
2802
2814
 
2803
- const DefaultPhotosensitiveWarning = ({ headingText, bodyText, infoText, }) => {
2815
+ const DefaultPhotosensitiveWarning = ({ bodyText, headingText, infoText, labelText, }) => {
2804
2816
  return (React__default["default"].createElement(uiReact.Flex, { className: `${ui.ComponentClassName.Alert} ${LivenessClassNames.StartScreenWarning}`, style: { zIndex: '3' } },
2805
2817
  React__default["default"].createElement(uiReact.View, { flex: "1" },
2806
2818
  React__default["default"].createElement(uiReact.View, { className: ui.ComponentClassName.AlertHeading }, headingText),
2807
2819
  React__default["default"].createElement(uiReact.View, { className: ui.ComponentClassName.AlertBody }, bodyText)),
2808
- React__default["default"].createElement(LivenessIconWithPopover, null, infoText)));
2820
+ React__default["default"].createElement(LivenessIconWithPopover, { labelText: labelText, headingText: headingText }, infoText)));
2809
2821
  };
2810
2822
  const DefaultRecordingIcon = ({ recordingIndicatorText, }) => {
2811
2823
  return (React__default["default"].createElement(uiReact.View, { className: LivenessClassNames.RecordingIconContainer },
@@ -2914,9 +2926,9 @@ const LivenessCameraModule = (props) => {
2914
2926
  setAspectRatio(videoRef.current.videoWidth / videoRef.current.videoHeight);
2915
2927
  }
2916
2928
  }, [send, videoRef, isCameraReady, isMobileScreen]);
2917
- const photoSensitivtyWarning = React__default["default"].useMemo(() => {
2929
+ const photoSensitivityWarning = React__default["default"].useMemo(() => {
2918
2930
  return (React__default["default"].createElement(uiReact.View, { style: { visibility: isStartView ? 'visible' : 'hidden' } },
2919
- React__default["default"].createElement(PhotosensitiveWarning, { headingText: instructionDisplayText.photosensitivyWarningHeadingText, bodyText: instructionDisplayText.photosensitivyWarningBodyText, infoText: instructionDisplayText.photosensitivyWarningInfoText })));
2931
+ React__default["default"].createElement(PhotosensitiveWarning, { bodyText: instructionDisplayText.photosensitivityWarningBodyText, headingText: instructionDisplayText.photosensitivityWarningHeadingText, infoText: instructionDisplayText.photosensitivityWarningInfoText, labelText: instructionDisplayText.photosensitivityWarningLabelText })));
2920
2932
  }, [PhotosensitiveWarning, instructionDisplayText, isStartView]);
2921
2933
  const handleMediaPlay = () => {
2922
2934
  setIsCameraReady(true);
@@ -2950,7 +2962,7 @@ const LivenessCameraModule = (props) => {
2950
2962
  }
2951
2963
  const isRecordingOnMobile = isMobileScreen && !isStartView && !isWaitingForCamera && isRecording;
2952
2964
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
2953
- photoSensitivtyWarning,
2965
+ photoSensitivityWarning,
2954
2966
  React__default["default"].createElement(uiReact.Flex, { className: ui.classNames(LivenessClassNames.CameraModule, isRecordingOnMobile && `${LivenessClassNames.CameraModule}--mobile`), "data-testid": testId, gap: "zero" },
2955
2967
  !isCameraReady && centeredLoader,
2956
2968
  React__default["default"].createElement(uiReact.View, { as: "canvas", ref: freshnessColorRef, className: LivenessClassNames.FreshnessCanvas, hidden: true }),
@@ -3111,7 +3123,7 @@ function getDisplayText(overrideDisplayText) {
3111
3123
  ...defaultLivenessDisplayText,
3112
3124
  ...overrideDisplayText,
3113
3125
  };
3114
- const { photosensitivyWarningHeadingText, photosensitivyWarningBodyText, photosensitivyWarningInfoText, goodFitCaptionText, goodFitAltText, tooFarCaptionText, tooFarAltText, cameraMinSpecificationsHeadingText, cameraMinSpecificationsMessageText, cameraNotFoundHeadingText, cameraNotFoundMessageText, retryCameraPermissionsText, waitingCameraPermissionText, a11yVideoLabelText, cancelLivenessCheckText, recordingIndicatorText, hintMoveFaceFrontOfCameraText, hintTooManyFacesText, hintFaceDetectedText, hintCanNotIdentifyText, hintTooCloseText, hintTooFarText, hintConnectingText, hintVerifyingText, hintIlluminationTooBrightText, hintIlluminationTooDarkText, hintIlluminationNormalText, hintHoldFaceForFreshnessText, timeoutHeaderText, timeoutMessageText, faceDistanceHeaderText, faceDistanceMessageText, multipleFacesHeaderText, multipleFacesMessageText, clientHeaderText, clientMessageText, serverHeaderText, serverMessageText, landscapeHeaderText, landscapeMessageText, portraitMessageText, tryAgainText, startScreenBeginCheckText, hintCenterFaceText, } = displayText;
3126
+ const { a11yVideoLabelText, cameraMinSpecificationsHeadingText, cameraMinSpecificationsMessageText, cameraNotFoundHeadingText, cameraNotFoundMessageText, cancelLivenessCheckText, clientHeaderText, clientMessageText, hintCanNotIdentifyText, hintCenterFaceText, hintConnectingText, hintFaceDetectedText, hintHoldFaceForFreshnessText, hintIlluminationNormalText, hintIlluminationTooBrightText, hintIlluminationTooDarkText, hintMoveFaceFrontOfCameraText, hintTooManyFacesText, hintTooCloseText, hintTooFarText, hintVerifyingText, faceDistanceHeaderText, faceDistanceMessageText, goodFitCaptionText, goodFitAltText, landscapeHeaderText, landscapeMessageText, multipleFacesHeaderText, multipleFacesMessageText, photosensitivityWarningBodyText, photosensitivityWarningHeadingText, photosensitivityWarningInfoText, photosensitivityWarningLabelText, photosensitivyWarningBodyText, photosensitivyWarningHeadingText, photosensitivyWarningInfoText, photosensitivyWarningLabelText, portraitMessageText, retryCameraPermissionsText, recordingIndicatorText, serverHeaderText, serverMessageText, startScreenBeginCheckText, timeoutHeaderText, timeoutMessageText, tooFarCaptionText, tooFarAltText, tryAgainText, waitingCameraPermissionText, } = displayText;
3115
3127
  const hintDisplayText = {
3116
3128
  hintMoveFaceFrontOfCameraText,
3117
3129
  hintTooManyFacesText,
@@ -3137,9 +3149,14 @@ function getDisplayText(overrideDisplayText) {
3137
3149
  a11yVideoLabelText,
3138
3150
  };
3139
3151
  const instructionDisplayText = {
3140
- photosensitivyWarningHeadingText,
3152
+ photosensitivityWarningBodyText,
3153
+ photosensitivityWarningHeadingText,
3154
+ photosensitivityWarningInfoText,
3155
+ photosensitivityWarningLabelText,
3141
3156
  photosensitivyWarningBodyText,
3157
+ photosensitivyWarningHeadingText,
3142
3158
  photosensitivyWarningInfoText,
3159
+ photosensitivyWarningLabelText,
3143
3160
  goodFitCaptionText,
3144
3161
  goodFitAltText,
3145
3162
  tooFarCaptionText,
package/dist/styles.css CHANGED
@@ -4213,7 +4213,7 @@ html[dir=rtl] .amplify-field-group__inner-start {
4213
4213
 
4214
4214
  .amplify-liveness-start-screen-warning {
4215
4215
  color: var(--amplify-colors-blue-90);
4216
- background-color: var(--amplify-colors-blue-20);
4216
+ background-color: var(--amplify-colors-blue-10);
4217
4217
  align-items: center;
4218
4218
  z-index: 3;
4219
4219
  }
@@ -4255,13 +4255,12 @@ html[dir=rtl] .amplify-field-group__inner-start {
4255
4255
 
4256
4256
  .amplify-liveness-popover {
4257
4257
  position: relative;
4258
- cursor: pointer;
4259
4258
  }
4260
4259
 
4261
4260
  .amplify-liveness-popover__anchor {
4262
4261
  position: absolute;
4263
4262
  top: 26px;
4264
- left: 3px;
4263
+ left: 20px;
4265
4264
  z-index: 3;
4266
4265
  border-style: solid;
4267
4266
  border-width: 0 9px 9px 9px;
@@ -4271,7 +4270,7 @@ html[dir=rtl] .amplify-field-group__inner-start {
4271
4270
  .amplify-liveness-popover__anchor-secondary {
4272
4271
  position: absolute;
4273
4272
  top: 24px;
4274
- left: 2px;
4273
+ left: 19px;
4275
4274
  z-index: 2;
4276
4275
  border-style: solid;
4277
4276
  border-width: 0 10px 10px 10px;
@@ -4284,6 +4283,7 @@ html[dir=rtl] .amplify-field-group__inner-start {
4284
4283
  color: var(--amplify-colors-font-primary);
4285
4284
  flex-direction: row;
4286
4285
  font-size: var(--amplify-font-sizes-xs);
4286
+ font-weight: var(--amplify-font-weights-normal);
4287
4287
  padding: var(--amplify-space-small);
4288
4288
  top: 33px;
4289
4289
  width: 240px;
@@ -23,14 +23,19 @@ export type CameraDisplayText = {
23
23
  a11yVideoLabelText?: string;
24
24
  };
25
25
  export type InstructionDisplayText = {
26
- photosensitivyWarningHeadingText?: string;
27
- photosensitivyWarningBodyText?: string;
28
- photosensitivyWarningInfoText?: string;
29
26
  goodFitCaptionText?: string;
30
27
  goodFitAltText?: string;
28
+ photosensitivityWarningBodyText?: string;
29
+ photosensitivityWarningHeadingText?: string;
30
+ photosensitivityWarningInfoText?: string;
31
+ photosensitivityWarningLabelText?: string;
32
+ photosensitivyWarningBodyText?: string;
33
+ photosensitivyWarningHeadingText?: string;
34
+ photosensitivyWarningInfoText?: string;
35
+ photosensitivyWarningLabelText?: string;
36
+ startScreenBeginCheckText?: string;
31
37
  tooFarCaptionText?: string;
32
38
  tooFarAltText?: string;
33
- startScreenBeginCheckText?: string;
34
39
  };
35
40
  export type StreamDisplayText = {
36
41
  recordingIndicatorText?: string;
@@ -5,11 +5,12 @@ export interface StartScreenComponents {
5
5
  PhotosensitiveWarning?: React.ComponentType;
6
6
  }
7
7
  interface DefaultPhotosensitiveWarningProps {
8
- headingText: string;
9
8
  bodyText: string;
9
+ headingText: string;
10
10
  infoText: string;
11
+ labelText: string;
11
12
  }
12
- export declare const DefaultPhotosensitiveWarning: ({ headingText, bodyText, infoText, }: DefaultPhotosensitiveWarningProps) => JSX.Element;
13
+ export declare const DefaultPhotosensitiveWarning: ({ bodyText, headingText, infoText, labelText, }: DefaultPhotosensitiveWarningProps) => JSX.Element;
13
14
  interface DefaultRecordingIconProps {
14
15
  recordingIndicatorText: string;
15
16
  }
@@ -5,5 +5,7 @@
5
5
  import * as React from 'react';
6
6
  export interface LivenessIconWithPopoverProps {
7
7
  children: string;
8
+ headingText: string;
9
+ labelText: string;
8
10
  }
9
11
  export declare const LivenessIconWithPopover: React.FC<LivenessIconWithPopoverProps>;
@@ -0,0 +1,7 @@
1
+ import * as React from 'react';
2
+ interface ToastWithLoaderProps {
3
+ displayText: string;
4
+ labelText?: string;
5
+ }
6
+ export declare const ToastWithLoader: React.FC<ToastWithLoaderProps>;
7
+ export {};
@@ -1 +1 @@
1
- export declare const VERSION = "3.0.5";
1
+ export declare const VERSION = "3.0.7";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@aws-amplify/ui-react-liveness",
3
- "version": "3.0.5",
3
+ "version": "3.0.7",
4
4
  "main": "dist/index.js",
5
5
  "module": "dist/esm/index.mjs",
6
6
  "exports": {
@@ -47,8 +47,8 @@
47
47
  "react-dom": "^16.14.0 || ^17.0 || ^18.0"
48
48
  },
49
49
  "dependencies": {
50
- "@aws-amplify/ui": "6.0.4",
51
- "@aws-amplify/ui-react": "6.0.5",
50
+ "@aws-amplify/ui": "6.0.6",
51
+ "@aws-amplify/ui-react": "6.0.7",
52
52
  "@aws-sdk/client-rekognitionstreaming": "3.398.0",
53
53
  "@aws-sdk/util-format-url": "^3.410.0",
54
54
  "@smithy/eventstream-serde-browser": "^2.0.4",