@xsolla/xui-input-password 0.64.0-pr56.1768440195

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.
@@ -0,0 +1,828 @@
1
+ // src/InputPassword.tsx
2
+ import React4, { useState, forwardRef as forwardRef3, useRef, useEffect } from "react";
3
+
4
+ // ../primitives-native/src/Box.tsx
5
+ import {
6
+ View,
7
+ Pressable,
8
+ Image
9
+ } from "react-native";
10
+ import { jsx } from "react/jsx-runtime";
11
+ var Box = ({
12
+ children,
13
+ onPress,
14
+ onLayout,
15
+ onMoveShouldSetResponder,
16
+ onResponderGrant,
17
+ onResponderMove,
18
+ onResponderRelease,
19
+ onResponderTerminate,
20
+ backgroundColor,
21
+ borderColor,
22
+ borderWidth,
23
+ borderBottomWidth,
24
+ borderBottomColor,
25
+ borderTopWidth,
26
+ borderTopColor,
27
+ borderLeftWidth,
28
+ borderLeftColor,
29
+ borderRightWidth,
30
+ borderRightColor,
31
+ borderRadius,
32
+ borderStyle,
33
+ height,
34
+ padding,
35
+ paddingHorizontal,
36
+ paddingVertical,
37
+ margin,
38
+ marginTop,
39
+ marginBottom,
40
+ marginLeft,
41
+ marginRight,
42
+ flexDirection,
43
+ alignItems,
44
+ justifyContent,
45
+ position,
46
+ top,
47
+ bottom,
48
+ left,
49
+ right,
50
+ width,
51
+ flex,
52
+ overflow,
53
+ zIndex,
54
+ hoverStyle,
55
+ pressStyle,
56
+ style,
57
+ "data-testid": dataTestId,
58
+ testID,
59
+ as,
60
+ src,
61
+ alt,
62
+ ...rest
63
+ }) => {
64
+ const getContainerStyle = (pressed) => ({
65
+ backgroundColor: pressed && pressStyle?.backgroundColor ? pressStyle.backgroundColor : backgroundColor,
66
+ borderColor,
67
+ borderWidth,
68
+ borderBottomWidth,
69
+ borderBottomColor,
70
+ borderTopWidth,
71
+ borderTopColor,
72
+ borderLeftWidth,
73
+ borderLeftColor,
74
+ borderRightWidth,
75
+ borderRightColor,
76
+ borderRadius,
77
+ borderStyle,
78
+ overflow,
79
+ zIndex,
80
+ height,
81
+ width,
82
+ padding,
83
+ paddingHorizontal,
84
+ paddingVertical,
85
+ margin,
86
+ marginTop,
87
+ marginBottom,
88
+ marginLeft,
89
+ marginRight,
90
+ flexDirection,
91
+ alignItems,
92
+ justifyContent,
93
+ position,
94
+ top,
95
+ bottom,
96
+ left,
97
+ right,
98
+ flex,
99
+ ...style
100
+ });
101
+ const finalTestID = dataTestId || testID;
102
+ const {
103
+ role,
104
+ tabIndex,
105
+ onKeyDown,
106
+ onKeyUp,
107
+ "aria-label": _ariaLabel,
108
+ "aria-labelledby": _ariaLabelledBy,
109
+ "aria-current": _ariaCurrent,
110
+ "aria-disabled": _ariaDisabled,
111
+ "aria-live": _ariaLive,
112
+ className,
113
+ "data-testid": _dataTestId,
114
+ ...nativeRest
115
+ } = rest;
116
+ if (as === "img" && src) {
117
+ const imageStyle = {
118
+ width,
119
+ height,
120
+ borderRadius,
121
+ position,
122
+ top,
123
+ bottom,
124
+ left,
125
+ right,
126
+ ...style
127
+ };
128
+ return /* @__PURE__ */ jsx(
129
+ Image,
130
+ {
131
+ source: { uri: src },
132
+ style: imageStyle,
133
+ testID: finalTestID,
134
+ resizeMode: "cover",
135
+ ...nativeRest
136
+ }
137
+ );
138
+ }
139
+ if (onPress) {
140
+ return /* @__PURE__ */ jsx(
141
+ Pressable,
142
+ {
143
+ onPress,
144
+ onLayout,
145
+ onMoveShouldSetResponder,
146
+ onResponderGrant,
147
+ onResponderMove,
148
+ onResponderRelease,
149
+ onResponderTerminate,
150
+ style: ({ pressed }) => getContainerStyle(pressed),
151
+ testID: finalTestID,
152
+ ...nativeRest,
153
+ children
154
+ }
155
+ );
156
+ }
157
+ return /* @__PURE__ */ jsx(
158
+ View,
159
+ {
160
+ style: getContainerStyle(),
161
+ testID: finalTestID,
162
+ onLayout,
163
+ onMoveShouldSetResponder,
164
+ onResponderGrant,
165
+ onResponderMove,
166
+ onResponderRelease,
167
+ onResponderTerminate,
168
+ ...nativeRest,
169
+ children
170
+ }
171
+ );
172
+ };
173
+
174
+ // ../primitives-native/src/Text.tsx
175
+ import { Text as RNText } from "react-native";
176
+ import { jsx as jsx2 } from "react/jsx-runtime";
177
+ var roleMap = {
178
+ alert: "alert",
179
+ heading: "header",
180
+ button: "button",
181
+ link: "link",
182
+ text: "text"
183
+ };
184
+ var Text = ({
185
+ children,
186
+ color,
187
+ fontSize,
188
+ fontWeight,
189
+ fontFamily,
190
+ id,
191
+ role,
192
+ ...props
193
+ }) => {
194
+ let resolvedFontFamily = fontFamily ? fontFamily.split(",")[0].replace(/['"]/g, "").trim() : void 0;
195
+ if (resolvedFontFamily === "Pilat Wide Bold") {
196
+ resolvedFontFamily = void 0;
197
+ }
198
+ const style = {
199
+ color,
200
+ fontSize: typeof fontSize === "number" ? fontSize : void 0,
201
+ fontWeight,
202
+ fontFamily: resolvedFontFamily,
203
+ textDecorationLine: props.textDecoration
204
+ };
205
+ const accessibilityRole = role ? roleMap[role] : void 0;
206
+ return /* @__PURE__ */ jsx2(RNText, { style, testID: id, accessibilityRole, children });
207
+ };
208
+
209
+ // ../primitives-native/src/Spinner.tsx
210
+ import { ActivityIndicator, View as View2 } from "react-native";
211
+ import { jsx as jsx3 } from "react/jsx-runtime";
212
+ var Spinner = ({
213
+ color,
214
+ size,
215
+ role,
216
+ "aria-label": ariaLabel,
217
+ "aria-live": ariaLive,
218
+ "aria-describedby": ariaDescribedBy,
219
+ testID
220
+ }) => {
221
+ return /* @__PURE__ */ jsx3(
222
+ View2,
223
+ {
224
+ accessible: true,
225
+ accessibilityRole: role === "status" ? "none" : void 0,
226
+ accessibilityLabel: ariaLabel,
227
+ accessibilityLiveRegion: ariaLive === "polite" ? "polite" : ariaLive === "assertive" ? "assertive" : "none",
228
+ testID,
229
+ children: /* @__PURE__ */ jsx3(
230
+ ActivityIndicator,
231
+ {
232
+ color,
233
+ size: typeof size === "number" ? size : "small"
234
+ }
235
+ )
236
+ }
237
+ );
238
+ };
239
+ Spinner.displayName = "Spinner";
240
+
241
+ // ../primitives-native/src/Icon.tsx
242
+ import React from "react";
243
+ import { View as View3 } from "react-native";
244
+ import { jsx as jsx4 } from "react/jsx-runtime";
245
+ var Icon = ({ children, color, size }) => {
246
+ const style = {
247
+ width: typeof size === "number" ? size : void 0,
248
+ height: typeof size === "number" ? size : void 0,
249
+ alignItems: "center",
250
+ justifyContent: "center"
251
+ };
252
+ const childrenWithProps = React.Children.map(children, (child) => {
253
+ if (React.isValidElement(child)) {
254
+ return React.cloneElement(child, {
255
+ color: child.props.color || color,
256
+ // Also pass size if child seems to be an icon that needs it
257
+ size: child.props.size || size
258
+ });
259
+ }
260
+ return child;
261
+ });
262
+ return /* @__PURE__ */ jsx4(View3, { style, children: childrenWithProps });
263
+ };
264
+
265
+ // ../primitives-native/src/Divider.tsx
266
+ import { View as View4 } from "react-native";
267
+ import { jsx as jsx5 } from "react/jsx-runtime";
268
+
269
+ // ../primitives-native/src/Input.tsx
270
+ import { forwardRef } from "react";
271
+ import { TextInput as RNTextInput } from "react-native";
272
+ import { jsx as jsx6 } from "react/jsx-runtime";
273
+ var keyboardTypeMap = {
274
+ text: "default",
275
+ number: "numeric",
276
+ email: "email-address",
277
+ tel: "phone-pad",
278
+ url: "url",
279
+ decimal: "decimal-pad"
280
+ };
281
+ var inputModeToKeyboardType = {
282
+ none: "default",
283
+ text: "default",
284
+ decimal: "decimal-pad",
285
+ numeric: "number-pad",
286
+ tel: "phone-pad",
287
+ search: "default",
288
+ email: "email-address",
289
+ url: "url"
290
+ };
291
+ var autoCompleteToTextContentType = {
292
+ "one-time-code": "oneTimeCode",
293
+ email: "emailAddress",
294
+ username: "username",
295
+ password: "password",
296
+ "new-password": "newPassword",
297
+ tel: "telephoneNumber",
298
+ "postal-code": "postalCode",
299
+ name: "name"
300
+ };
301
+ var InputPrimitive = forwardRef(
302
+ ({
303
+ value,
304
+ placeholder,
305
+ onChange,
306
+ onChangeText,
307
+ onFocus,
308
+ onBlur,
309
+ onKeyDown,
310
+ disabled,
311
+ secureTextEntry,
312
+ style,
313
+ color,
314
+ fontSize,
315
+ placeholderTextColor,
316
+ maxLength,
317
+ name,
318
+ type,
319
+ inputMode,
320
+ autoComplete,
321
+ id,
322
+ "aria-invalid": ariaInvalid,
323
+ "aria-describedby": ariaDescribedBy,
324
+ "aria-labelledby": ariaLabelledBy,
325
+ "aria-label": ariaLabel,
326
+ "aria-disabled": ariaDisabled,
327
+ "data-testid": dataTestId
328
+ }, ref) => {
329
+ const handleChangeText = (text) => {
330
+ onChangeText?.(text);
331
+ if (onChange) {
332
+ const syntheticEvent = {
333
+ target: { value: text },
334
+ currentTarget: { value: text },
335
+ type: "change",
336
+ nativeEvent: { text },
337
+ preventDefault: () => {
338
+ },
339
+ stopPropagation: () => {
340
+ },
341
+ isTrusted: false
342
+ };
343
+ onChange(syntheticEvent);
344
+ }
345
+ };
346
+ const keyboardType = inputMode ? inputModeToKeyboardType[inputMode] || "default" : type ? keyboardTypeMap[type] || "default" : "default";
347
+ const textContentType = autoComplete ? autoCompleteToTextContentType[autoComplete] : void 0;
348
+ return /* @__PURE__ */ jsx6(
349
+ RNTextInput,
350
+ {
351
+ ref,
352
+ value,
353
+ placeholder,
354
+ onChangeText: handleChangeText,
355
+ onFocus,
356
+ onBlur,
357
+ onKeyPress: (e) => {
358
+ if (onKeyDown) {
359
+ onKeyDown({
360
+ key: e.nativeEvent.key,
361
+ preventDefault: () => {
362
+ }
363
+ });
364
+ }
365
+ },
366
+ editable: !disabled,
367
+ secureTextEntry: secureTextEntry || type === "password",
368
+ keyboardType,
369
+ textContentType,
370
+ style: [
371
+ {
372
+ color,
373
+ fontSize: typeof fontSize === "number" ? fontSize : void 0,
374
+ flex: 1,
375
+ padding: 0,
376
+ textAlign: style?.textAlign || "left"
377
+ },
378
+ style
379
+ ],
380
+ placeholderTextColor,
381
+ maxLength,
382
+ testID: dataTestId || id,
383
+ accessibilityLabel: ariaLabel,
384
+ accessibilityHint: ariaDescribedBy,
385
+ accessibilityState: {
386
+ disabled: disabled || ariaDisabled
387
+ },
388
+ accessible: true
389
+ }
390
+ );
391
+ }
392
+ );
393
+ InputPrimitive.displayName = "InputPrimitive";
394
+
395
+ // ../primitives-native/src/TextArea.tsx
396
+ import { forwardRef as forwardRef2 } from "react";
397
+ import { TextInput as RNTextInput2 } from "react-native";
398
+ import { jsx as jsx7 } from "react/jsx-runtime";
399
+ var TextAreaPrimitive = forwardRef2(
400
+ ({
401
+ value,
402
+ placeholder,
403
+ onChange,
404
+ onChangeText,
405
+ onFocus,
406
+ onBlur,
407
+ onKeyDown,
408
+ disabled,
409
+ style,
410
+ color,
411
+ fontSize,
412
+ placeholderTextColor,
413
+ maxLength,
414
+ rows,
415
+ id,
416
+ "aria-invalid": ariaInvalid,
417
+ "aria-describedby": ariaDescribedBy,
418
+ "aria-labelledby": ariaLabelledBy,
419
+ "aria-label": ariaLabel,
420
+ "aria-disabled": ariaDisabled,
421
+ "data-testid": dataTestId
422
+ }, ref) => {
423
+ const handleChangeText = (text) => {
424
+ onChangeText?.(text);
425
+ if (onChange) {
426
+ const syntheticEvent = {
427
+ target: { value: text },
428
+ currentTarget: { value: text },
429
+ type: "change",
430
+ nativeEvent: { text },
431
+ preventDefault: () => {
432
+ },
433
+ stopPropagation: () => {
434
+ },
435
+ isTrusted: false
436
+ };
437
+ onChange(syntheticEvent);
438
+ }
439
+ };
440
+ return /* @__PURE__ */ jsx7(
441
+ RNTextInput2,
442
+ {
443
+ ref,
444
+ value,
445
+ placeholder,
446
+ onChangeText: handleChangeText,
447
+ onFocus,
448
+ onBlur,
449
+ onKeyPress: (e) => {
450
+ if (onKeyDown) {
451
+ onKeyDown({
452
+ key: e.nativeEvent.key,
453
+ preventDefault: () => {
454
+ }
455
+ });
456
+ }
457
+ },
458
+ editable: !disabled,
459
+ multiline: true,
460
+ numberOfLines: rows || 4,
461
+ style: [
462
+ {
463
+ color,
464
+ fontSize: typeof fontSize === "number" ? fontSize : void 0,
465
+ flex: 1,
466
+ padding: 0,
467
+ textAlignVertical: "top",
468
+ textAlign: style?.textAlign || "left"
469
+ },
470
+ style
471
+ ],
472
+ placeholderTextColor,
473
+ maxLength,
474
+ testID: dataTestId || id,
475
+ accessibilityLabel: ariaLabel,
476
+ accessibilityHint: ariaDescribedBy,
477
+ accessibilityState: {
478
+ disabled: disabled || ariaDisabled
479
+ },
480
+ accessible: true
481
+ }
482
+ );
483
+ }
484
+ );
485
+ TextAreaPrimitive.displayName = "TextAreaPrimitive";
486
+
487
+ // src/InputPassword.tsx
488
+ import { useDesignSystem, useId } from "@xsolla/xui-core";
489
+ import { Eye, EyeOff, X, Check, AlertCircle } from "@xsolla/xui-icons";
490
+ import { jsx as jsx8, jsxs } from "react/jsx-runtime";
491
+ var InputPassword = forwardRef3(
492
+ ({
493
+ extraSee = false,
494
+ extraClear = false,
495
+ extraCheckup,
496
+ initialVisible = false,
497
+ value,
498
+ placeholder,
499
+ onChange,
500
+ onChangeText,
501
+ onKeyDown,
502
+ onRemove,
503
+ size = "m",
504
+ disabled = false,
505
+ name,
506
+ label,
507
+ helperText,
508
+ errorMessage,
509
+ error,
510
+ id: providedId,
511
+ "aria-label": ariaLabel,
512
+ testID,
513
+ ...rest
514
+ }, ref) => {
515
+ const { theme } = useDesignSystem();
516
+ const [isVisible, setIsVisible] = useState(initialVisible);
517
+ const [internalState, setInternalState] = useState(
518
+ "default"
519
+ );
520
+ const [passValue, setPassValue] = useState(value ?? "");
521
+ const [isChecked, setIsChecked] = useState(false);
522
+ const inputRef = useRef(null);
523
+ const rawId = useId();
524
+ const safeId = rawId.replace(/:/g, "");
525
+ const inputId = providedId || `input-password-${safeId}`;
526
+ const labelId = `${inputId}-label`;
527
+ const errorId = `${inputId}-error`;
528
+ const helperId = `${inputId}-helper`;
529
+ React4.useImperativeHandle(
530
+ ref,
531
+ () => inputRef.current,
532
+ []
533
+ );
534
+ useEffect(() => {
535
+ if (value !== void 0) {
536
+ setPassValue(value);
537
+ }
538
+ }, [value]);
539
+ useEffect(() => {
540
+ if (extraCheckup && passValue) {
541
+ setIsChecked(extraCheckup(passValue));
542
+ } else {
543
+ setIsChecked(false);
544
+ }
545
+ }, [passValue, extraCheckup]);
546
+ const isDisable = disabled;
547
+ const isError = !!(errorMessage || error);
548
+ const isFocus = internalState === "focus";
549
+ const isCheckedShown = isChecked && !isError;
550
+ const isExtraClearIconShown = !disabled && extraClear && !!passValue;
551
+ const isExtraSeeShown = extraSee;
552
+ const isErrorIconShown = isError;
553
+ const extrasCount = Number(isExtraClearIconShown) + Number(isCheckedShown) + Number(isExtraSeeShown) + Number(isErrorIconShown);
554
+ const sizeStyles = theme.sizing.input(size);
555
+ const inputColors = theme.colors.control.input;
556
+ const handleFocus = () => {
557
+ if (!isDisable) {
558
+ setInternalState("focus");
559
+ }
560
+ };
561
+ const handleBlur = () => {
562
+ if (!isDisable) {
563
+ setInternalState("default");
564
+ }
565
+ };
566
+ const handleChange = (e) => {
567
+ const newValue = e.target.value;
568
+ if (onChange) {
569
+ onChange(e);
570
+ }
571
+ if (onChangeText) {
572
+ onChangeText(newValue);
573
+ }
574
+ setPassValue(newValue);
575
+ };
576
+ const handleKeyDown = (e) => {
577
+ if (e.key === "Escape") {
578
+ e.currentTarget.blur();
579
+ }
580
+ if (onKeyDown) {
581
+ onKeyDown(e);
582
+ }
583
+ };
584
+ const handleClear = (e) => {
585
+ e.stopPropagation();
586
+ setPassValue("");
587
+ onRemove?.();
588
+ if (inputRef.current) {
589
+ if (typeof window !== "undefined" && window.HTMLInputElement) {
590
+ const nativeInputValueSetter = Object.getOwnPropertyDescriptor(
591
+ window.HTMLInputElement.prototype,
592
+ "value"
593
+ )?.set;
594
+ if (nativeInputValueSetter) {
595
+ nativeInputValueSetter.call(inputRef.current, "");
596
+ }
597
+ }
598
+ const syntheticEvent = {
599
+ target: inputRef.current,
600
+ currentTarget: inputRef.current,
601
+ type: "change"
602
+ };
603
+ onChange?.(syntheticEvent);
604
+ inputRef.current.focus();
605
+ }
606
+ };
607
+ const toggleVisibility = () => {
608
+ setIsVisible(!isVisible);
609
+ };
610
+ let backgroundColor = inputColors.bg;
611
+ let borderColor = inputColors.border;
612
+ let outlineColor;
613
+ if (isDisable) {
614
+ backgroundColor = inputColors.bgDisable;
615
+ borderColor = inputColors.borderDisable;
616
+ } else if (isError) {
617
+ outlineColor = theme.colors.border.alert;
618
+ if (isFocus) {
619
+ backgroundColor = theme.colors.control.focus.bg;
620
+ }
621
+ } else if (isFocus) {
622
+ backgroundColor = theme.colors.control.focus.bg;
623
+ outlineColor = theme.colors.border.brand;
624
+ }
625
+ const textColor = isDisable ? inputColors.textDisable : inputColors.text;
626
+ const placeholderColor = inputColors.placeholder;
627
+ const iconColor = isDisable ? inputColors.placeholder : inputColors.text;
628
+ const paddingConfig = {
629
+ xl: { vertical: 12, horizontal: 12 },
630
+ l: { vertical: 14, horizontal: 12 },
631
+ m: { vertical: 11, horizontal: 12 },
632
+ s: { vertical: 7, horizontal: 10 },
633
+ xs: { vertical: 7, horizontal: 10 }
634
+ };
635
+ const borderRadiusConfig = {
636
+ xl: 4,
637
+ l: 4,
638
+ m: 2,
639
+ s: 2,
640
+ xs: 2
641
+ };
642
+ const iconSizeConfig = {
643
+ xl: 18,
644
+ l: 18,
645
+ m: 18,
646
+ s: 16,
647
+ xs: 16
648
+ };
649
+ const focusOutlineConfig = {
650
+ xl: { width: 2, offset: -2 },
651
+ l: { width: 2, offset: -2 },
652
+ m: { width: 1, offset: -1 },
653
+ s: { width: 1, offset: -1 },
654
+ xs: { width: 1, offset: -1 }
655
+ };
656
+ const padding = paddingConfig[size];
657
+ const borderRadius = borderRadiusConfig[size];
658
+ const iconSize = iconSizeConfig[size];
659
+ const focusOutline = focusOutlineConfig[size];
660
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", gap: 8, width: "100%", testID, children: [
661
+ label && /* @__PURE__ */ jsx8(Box, { as: "label", id: labelId, htmlFor: inputId, children: /* @__PURE__ */ jsx8(
662
+ Text,
663
+ {
664
+ color: theme.colors.content.secondary,
665
+ fontSize: sizeStyles.fontSize - 2,
666
+ fontWeight: "500",
667
+ children: label
668
+ }
669
+ ) }),
670
+ /* @__PURE__ */ jsxs(
671
+ Box,
672
+ {
673
+ backgroundColor,
674
+ borderColor,
675
+ borderWidth: borderColor !== "transparent" ? 1 : 0,
676
+ borderRadius,
677
+ height: sizeStyles.height,
678
+ paddingVertical: padding.vertical,
679
+ paddingHorizontal: padding.horizontal,
680
+ flexDirection: "row",
681
+ alignItems: "center",
682
+ gap: 10,
683
+ position: "relative",
684
+ style: {
685
+ ...outlineColor ? {
686
+ outline: `${focusOutline.width}px solid ${outlineColor}`,
687
+ outlineOffset: `${focusOutline.offset}px`
688
+ } : {}
689
+ },
690
+ hoverStyle: !isDisable && !isFocus && !isError ? {
691
+ backgroundColor: inputColors.bgHover,
692
+ borderColor: inputColors.borderHover
693
+ } : void 0,
694
+ children: [
695
+ /* @__PURE__ */ jsx8(Box, { flex: 1, height: "100%", justifyContent: "center", children: /* @__PURE__ */ jsx8(
696
+ InputPrimitive,
697
+ {
698
+ ref: inputRef,
699
+ id: inputId,
700
+ value: passValue,
701
+ name,
702
+ placeholder,
703
+ onChange: handleChange,
704
+ onFocus: handleFocus,
705
+ onBlur: handleBlur,
706
+ onKeyDown: handleKeyDown,
707
+ disabled: isDisable,
708
+ type: isVisible ? "text" : "password",
709
+ color: textColor,
710
+ fontSize: sizeStyles.fontSize,
711
+ placeholderTextColor: placeholderColor,
712
+ "aria-invalid": isError || void 0,
713
+ "aria-describedby": errorMessage ? errorId : helperText ? helperId : void 0,
714
+ "aria-labelledby": label ? labelId : void 0,
715
+ "aria-label": !label ? ariaLabel : void 0,
716
+ "aria-disabled": isDisable || void 0,
717
+ "data-testid": "input-password__field",
718
+ ...rest
719
+ }
720
+ ) }),
721
+ extrasCount > 0 && /* @__PURE__ */ jsxs(Box, { flexDirection: "row", alignItems: "center", gap: 4, children: [
722
+ isExtraClearIconShown && /* @__PURE__ */ jsx8(
723
+ Box,
724
+ {
725
+ as: "button",
726
+ type: "button",
727
+ alignItems: "center",
728
+ justifyContent: "center",
729
+ width: iconSize,
730
+ height: "100%",
731
+ backgroundColor: "transparent",
732
+ borderWidth: 0,
733
+ cursor: disabled ? "not-allowed" : "pointer",
734
+ onPress: !disabled ? handleClear : void 0,
735
+ disabled,
736
+ "aria-label": "Clear input",
737
+ "data-testid": "input-password__extra-clear-button",
738
+ children: /* @__PURE__ */ jsx8(Icon, { size: iconSize, color: textColor, children: /* @__PURE__ */ jsx8(X, {}) })
739
+ }
740
+ ),
741
+ isCheckedShown && /* @__PURE__ */ jsx8(
742
+ Box,
743
+ {
744
+ alignItems: "center",
745
+ justifyContent: "center",
746
+ width: iconSize,
747
+ height: "100%",
748
+ role: "img",
749
+ "aria-label": "Password meets requirements",
750
+ "data-testid": "input-password__check-icon",
751
+ children: /* @__PURE__ */ jsx8(
752
+ Icon,
753
+ {
754
+ size: iconSize,
755
+ color: theme.colors.content.success.primary,
756
+ children: /* @__PURE__ */ jsx8(Check, {})
757
+ }
758
+ )
759
+ }
760
+ ),
761
+ isExtraSeeShown && /* @__PURE__ */ jsx8(
762
+ Box,
763
+ {
764
+ as: "button",
765
+ type: "button",
766
+ alignItems: "center",
767
+ justifyContent: "center",
768
+ backgroundColor: "transparent",
769
+ borderWidth: 0,
770
+ cursor: "pointer",
771
+ onPress: toggleVisibility,
772
+ "aria-label": isVisible ? "Hide password" : "Show password",
773
+ "aria-pressed": isVisible,
774
+ "data-testid": "input-password__visibility-toggle",
775
+ children: isVisible ? /* @__PURE__ */ jsx8(EyeOff, { size: iconSize, color: iconColor }) : /* @__PURE__ */ jsx8(Eye, { size: iconSize, color: iconColor })
776
+ }
777
+ ),
778
+ isErrorIconShown && /* @__PURE__ */ jsx8(
779
+ Box,
780
+ {
781
+ alignItems: "center",
782
+ justifyContent: "center",
783
+ width: iconSize,
784
+ height: "100%",
785
+ role: "img",
786
+ "aria-label": "Error",
787
+ "data-testid": "input-password__error-icon",
788
+ children: /* @__PURE__ */ jsx8(
789
+ Icon,
790
+ {
791
+ size: iconSize,
792
+ color: theme.colors.content.alert.primary,
793
+ children: /* @__PURE__ */ jsx8(AlertCircle, {})
794
+ }
795
+ )
796
+ }
797
+ )
798
+ ] })
799
+ ]
800
+ }
801
+ ),
802
+ errorMessage && /* @__PURE__ */ jsx8(
803
+ Text,
804
+ {
805
+ id: errorId,
806
+ role: "alert",
807
+ color: theme.colors.content.alert.primary,
808
+ fontSize: sizeStyles.fontSize - 2,
809
+ children: errorMessage
810
+ }
811
+ ),
812
+ helperText && !errorMessage && /* @__PURE__ */ jsx8(
813
+ Text,
814
+ {
815
+ id: helperId,
816
+ color: theme.colors.content.secondary,
817
+ fontSize: sizeStyles.fontSize - 2,
818
+ children: helperText
819
+ }
820
+ )
821
+ ] });
822
+ }
823
+ );
824
+ InputPassword.displayName = "InputPassword";
825
+ export {
826
+ InputPassword
827
+ };
828
+ //# sourceMappingURL=index.mjs.map