@xsolla/xui-input-copy 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.
package/web/index.mjs ADDED
@@ -0,0 +1,656 @@
1
+ // src/InputCopy.tsx
2
+ import React4, { useState, useEffect, forwardRef as forwardRef3, useRef } from "react";
3
+
4
+ // ../primitives-web/src/Box.tsx
5
+ import React from "react";
6
+ import styled from "styled-components";
7
+ import { jsx } from "react/jsx-runtime";
8
+ var StyledBox = styled.div`
9
+ display: flex;
10
+ box-sizing: border-box;
11
+ background-color: ${(props) => props.backgroundColor || "transparent"};
12
+ border-color: ${(props) => props.borderColor || "transparent"};
13
+ border-width: ${(props) => typeof props.borderWidth === "number" ? `${props.borderWidth}px` : props.borderWidth || 0};
14
+
15
+ ${(props) => props.borderBottomWidth !== void 0 && `
16
+ border-bottom-width: ${typeof props.borderBottomWidth === "number" ? `${props.borderBottomWidth}px` : props.borderBottomWidth};
17
+ border-bottom-color: ${props.borderBottomColor || props.borderColor || "transparent"};
18
+ border-bottom-style: solid;
19
+ `}
20
+ ${(props) => props.borderTopWidth !== void 0 && `
21
+ border-top-width: ${typeof props.borderTopWidth === "number" ? `${props.borderTopWidth}px` : props.borderTopWidth};
22
+ border-top-color: ${props.borderTopColor || props.borderColor || "transparent"};
23
+ border-top-style: solid;
24
+ `}
25
+ ${(props) => props.borderLeftWidth !== void 0 && `
26
+ border-left-width: ${typeof props.borderLeftWidth === "number" ? `${props.borderLeftWidth}px` : props.borderLeftWidth};
27
+ border-left-color: ${props.borderLeftColor || props.borderColor || "transparent"};
28
+ border-left-style: solid;
29
+ `}
30
+ ${(props) => props.borderRightWidth !== void 0 && `
31
+ border-right-width: ${typeof props.borderRightWidth === "number" ? `${props.borderRightWidth}px` : props.borderRightWidth};
32
+ border-right-color: ${props.borderRightColor || props.borderColor || "transparent"};
33
+ border-right-style: solid;
34
+ `}
35
+
36
+ border-style: ${(props) => props.borderStyle || (props.borderWidth || props.borderBottomWidth || props.borderTopWidth || props.borderLeftWidth || props.borderRightWidth ? "solid" : "none")};
37
+ border-radius: ${(props) => typeof props.borderRadius === "number" ? `${props.borderRadius}px` : props.borderRadius || 0};
38
+ height: ${(props) => typeof props.height === "number" ? `${props.height}px` : props.height || "auto"};
39
+ width: ${(props) => typeof props.width === "number" ? `${props.width}px` : props.width || "auto"};
40
+ min-width: ${(props) => typeof props.minWidth === "number" ? `${props.minWidth}px` : props.minWidth || "auto"};
41
+ min-height: ${(props) => typeof props.minHeight === "number" ? `${props.minHeight}px` : props.minHeight || "auto"};
42
+
43
+ padding: ${(props) => typeof props.padding === "number" ? `${props.padding}px` : props.padding || 0};
44
+ ${(props) => props.paddingHorizontal && `
45
+ padding-left: ${typeof props.paddingHorizontal === "number" ? `${props.paddingHorizontal}px` : props.paddingHorizontal};
46
+ padding-right: ${typeof props.paddingHorizontal === "number" ? `${props.paddingHorizontal}px` : props.paddingHorizontal};
47
+ `}
48
+ ${(props) => props.paddingVertical && `
49
+ padding-top: ${typeof props.paddingVertical === "number" ? `${props.paddingVertical}px` : props.paddingVertical};
50
+ padding-bottom: ${typeof props.paddingVertical === "number" ? `${props.paddingVertical}px` : props.paddingVertical};
51
+ `}
52
+ ${(props) => props.paddingTop !== void 0 && `padding-top: ${typeof props.paddingTop === "number" ? `${props.paddingTop}px` : props.paddingTop};`}
53
+ ${(props) => props.paddingBottom !== void 0 && `padding-bottom: ${typeof props.paddingBottom === "number" ? `${props.paddingBottom}px` : props.paddingBottom};`}
54
+ ${(props) => props.paddingLeft !== void 0 && `padding-left: ${typeof props.paddingLeft === "number" ? `${props.paddingLeft}px` : props.paddingLeft};`}
55
+ ${(props) => props.paddingRight !== void 0 && `padding-right: ${typeof props.paddingRight === "number" ? `${props.paddingRight}px` : props.paddingRight};`}
56
+
57
+ margin: ${(props) => typeof props.margin === "number" ? `${props.margin}px` : props.margin || 0};
58
+ ${(props) => props.marginTop !== void 0 && `margin-top: ${typeof props.marginTop === "number" ? `${props.marginTop}px` : props.marginTop};`}
59
+ ${(props) => props.marginBottom !== void 0 && `margin-bottom: ${typeof props.marginBottom === "number" ? `${props.marginBottom}px` : props.marginBottom};`}
60
+ ${(props) => props.marginLeft !== void 0 && `margin-left: ${typeof props.marginLeft === "number" ? `${props.marginLeft}px` : props.marginLeft};`}
61
+ ${(props) => props.marginRight !== void 0 && `margin-right: ${typeof props.marginRight === "number" ? `${props.marginRight}px` : props.marginRight};`}
62
+
63
+ flex-direction: ${(props) => props.flexDirection || "column"};
64
+ flex-wrap: ${(props) => props.flexWrap || "nowrap"};
65
+ align-items: ${(props) => props.alignItems || "stretch"};
66
+ justify-content: ${(props) => props.justifyContent || "flex-start"};
67
+ cursor: ${(props) => props.cursor ? props.cursor : props.onClick || props.onPress ? "pointer" : "inherit"};
68
+ position: ${(props) => props.position || "static"};
69
+ top: ${(props) => typeof props.top === "number" ? `${props.top}px` : props.top};
70
+ bottom: ${(props) => typeof props.bottom === "number" ? `${props.bottom}px` : props.bottom};
71
+ left: ${(props) => typeof props.left === "number" ? `${props.left}px` : props.left};
72
+ right: ${(props) => typeof props.right === "number" ? `${props.right}px` : props.right};
73
+ flex: ${(props) => props.flex};
74
+ flex-shrink: ${(props) => props.flexShrink ?? 1};
75
+ gap: ${(props) => typeof props.gap === "number" ? `${props.gap}px` : props.gap || 0};
76
+ align-self: ${(props) => props.alignSelf || "auto"};
77
+ overflow: ${(props) => props.overflow || "visible"};
78
+ overflow-x: ${(props) => props.overflowX || "visible"};
79
+ overflow-y: ${(props) => props.overflowY || "visible"};
80
+ z-index: ${(props) => props.zIndex};
81
+ opacity: ${(props) => props.disabled ? 0.5 : 1};
82
+ pointer-events: ${(props) => props.disabled ? "none" : "auto"};
83
+
84
+ &:hover {
85
+ ${(props) => props.hoverStyle?.backgroundColor && `background-color: ${props.hoverStyle.backgroundColor};`}
86
+ ${(props) => props.hoverStyle?.borderColor && `border-color: ${props.hoverStyle.borderColor};`}
87
+ }
88
+
89
+ &:active {
90
+ ${(props) => props.pressStyle?.backgroundColor && `background-color: ${props.pressStyle.backgroundColor};`}
91
+ }
92
+ `;
93
+ var Box = React.forwardRef(
94
+ ({
95
+ children,
96
+ onPress,
97
+ onKeyDown,
98
+ onKeyUp,
99
+ role,
100
+ "aria-label": ariaLabel,
101
+ "aria-labelledby": ariaLabelledBy,
102
+ "aria-current": ariaCurrent,
103
+ "aria-disabled": ariaDisabled,
104
+ "aria-live": ariaLive,
105
+ "aria-busy": ariaBusy,
106
+ "aria-describedby": ariaDescribedBy,
107
+ "aria-expanded": ariaExpanded,
108
+ "aria-haspopup": ariaHasPopup,
109
+ "aria-pressed": ariaPressed,
110
+ "aria-controls": ariaControls,
111
+ tabIndex,
112
+ as,
113
+ src,
114
+ alt,
115
+ type,
116
+ disabled,
117
+ id,
118
+ ...props
119
+ }, ref) => {
120
+ if (as === "img" && src) {
121
+ return /* @__PURE__ */ jsx(
122
+ "img",
123
+ {
124
+ src,
125
+ alt: alt || "",
126
+ style: {
127
+ display: "block",
128
+ objectFit: "cover",
129
+ width: typeof props.width === "number" ? `${props.width}px` : props.width,
130
+ height: typeof props.height === "number" ? `${props.height}px` : props.height,
131
+ borderRadius: typeof props.borderRadius === "number" ? `${props.borderRadius}px` : props.borderRadius,
132
+ position: props.position,
133
+ top: typeof props.top === "number" ? `${props.top}px` : props.top,
134
+ left: typeof props.left === "number" ? `${props.left}px` : props.left,
135
+ right: typeof props.right === "number" ? `${props.right}px` : props.right,
136
+ bottom: typeof props.bottom === "number" ? `${props.bottom}px` : props.bottom
137
+ }
138
+ }
139
+ );
140
+ }
141
+ return /* @__PURE__ */ jsx(
142
+ StyledBox,
143
+ {
144
+ ref,
145
+ as,
146
+ id,
147
+ type: as === "button" ? type || "button" : void 0,
148
+ disabled: as === "button" ? disabled : void 0,
149
+ onClick: onPress,
150
+ onKeyDown,
151
+ onKeyUp,
152
+ role,
153
+ "aria-label": ariaLabel,
154
+ "aria-labelledby": ariaLabelledBy,
155
+ "aria-current": ariaCurrent,
156
+ "aria-disabled": ariaDisabled,
157
+ "aria-busy": ariaBusy,
158
+ "aria-describedby": ariaDescribedBy,
159
+ "aria-expanded": ariaExpanded,
160
+ "aria-haspopup": ariaHasPopup,
161
+ "aria-pressed": ariaPressed,
162
+ "aria-controls": ariaControls,
163
+ "aria-live": ariaLive,
164
+ tabIndex: tabIndex !== void 0 ? tabIndex : void 0,
165
+ ...props,
166
+ children
167
+ }
168
+ );
169
+ }
170
+ );
171
+ Box.displayName = "Box";
172
+
173
+ // ../primitives-web/src/Text.tsx
174
+ import styled2 from "styled-components";
175
+ import { jsx as jsx2 } from "react/jsx-runtime";
176
+ var StyledText = styled2.span`
177
+ color: ${(props) => props.color || "inherit"};
178
+ font-size: ${(props) => typeof props.fontSize === "number" ? `${props.fontSize}px` : props.fontSize || "inherit"};
179
+ font-weight: ${(props) => props.fontWeight || "normal"};
180
+ font-family: ${(props) => props.fontFamily || '"Pilat Wide Bold", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif !important'};
181
+ line-height: ${(props) => typeof props.lineHeight === "number" ? `${props.lineHeight}px` : props.lineHeight || "inherit"};
182
+ white-space: ${(props) => props.whiteSpace || "normal"};
183
+ text-align: ${(props) => props.textAlign || "inherit"};
184
+ text-decoration: ${(props) => props.textDecoration || "none"};
185
+ `;
186
+ var Text = ({
187
+ style,
188
+ className,
189
+ id,
190
+ role,
191
+ ...props
192
+ }) => {
193
+ return /* @__PURE__ */ jsx2(
194
+ StyledText,
195
+ {
196
+ ...props,
197
+ style,
198
+ className,
199
+ id,
200
+ role
201
+ }
202
+ );
203
+ };
204
+
205
+ // ../primitives-web/src/Spinner.tsx
206
+ import styled3, { keyframes } from "styled-components";
207
+ import { jsx as jsx3 } from "react/jsx-runtime";
208
+ var rotate = keyframes`
209
+ from {
210
+ transform: rotate(0deg);
211
+ }
212
+ to {
213
+ transform: rotate(360deg);
214
+ }
215
+ `;
216
+ var StyledSpinner = styled3.div`
217
+ width: ${(props) => typeof props.size === "number" ? `${props.size}px` : props.size || "24px"};
218
+ height: ${(props) => typeof props.size === "number" ? `${props.size}px` : props.size || "24px"};
219
+ border: ${(props) => props.strokeWidth || 2}px solid
220
+ ${(props) => props.color || "currentColor"};
221
+ border-bottom-color: transparent;
222
+ border-radius: 50%;
223
+ display: inline-block;
224
+ box-sizing: border-box;
225
+ animation: ${rotate} 1s linear infinite;
226
+ `;
227
+ var Spinner = ({
228
+ role = "status",
229
+ "aria-label": ariaLabel,
230
+ "aria-live": ariaLive = "polite",
231
+ "aria-describedby": ariaDescribedBy,
232
+ testID,
233
+ ...props
234
+ }) => {
235
+ return /* @__PURE__ */ jsx3(
236
+ StyledSpinner,
237
+ {
238
+ role,
239
+ "aria-label": ariaLabel,
240
+ "aria-live": ariaLive,
241
+ "aria-describedby": ariaDescribedBy,
242
+ "data-testid": testID,
243
+ ...props
244
+ }
245
+ );
246
+ };
247
+ Spinner.displayName = "Spinner";
248
+
249
+ // ../primitives-web/src/Icon.tsx
250
+ import styled4 from "styled-components";
251
+ import { jsx as jsx4 } from "react/jsx-runtime";
252
+ var StyledIcon = styled4.div`
253
+ display: flex;
254
+ align-items: center;
255
+ justify-content: center;
256
+ width: ${(props) => typeof props.size === "number" ? `${props.size}px` : props.size || "24px"};
257
+ height: ${(props) => typeof props.size === "number" ? `${props.size}px` : props.size || "24px"};
258
+ color: ${(props) => props.color || "currentColor"};
259
+
260
+ svg {
261
+ width: 100%;
262
+ height: 100%;
263
+ fill: none;
264
+ stroke: currentColor;
265
+ }
266
+ `;
267
+ var Icon = ({ children, ...props }) => {
268
+ return /* @__PURE__ */ jsx4(StyledIcon, { ...props, children });
269
+ };
270
+
271
+ // ../primitives-web/src/Divider.tsx
272
+ import styled5 from "styled-components";
273
+ import { jsx as jsx5 } from "react/jsx-runtime";
274
+ var StyledDivider = styled5.div`
275
+ background-color: ${(props) => props.dashStroke ? "transparent" : props.color || "rgba(255, 255, 255, 0.15)"};
276
+ width: ${(props) => props.vertical ? typeof props.width === "number" ? `${props.width}px` : props.width || "1px" : "100%"};
277
+ height: ${(props) => props.vertical ? "100%" : typeof props.height === "number" ? `${props.height}px` : props.height || "1px"};
278
+
279
+ ${(props) => props.dashStroke && `
280
+ border-style: dashed;
281
+ border-color: ${props.color || "rgba(255, 255, 255, 0.15)"};
282
+ border-width: 0;
283
+ ${props.vertical ? `
284
+ border-left-width: ${typeof props.width === "number" ? `${props.width}px` : props.width || "1px"};
285
+ height: 100%;
286
+ ` : `
287
+ border-top-width: ${typeof props.height === "number" ? `${props.height}px` : props.height || "1px"};
288
+ width: 100%;
289
+ `}
290
+ `}
291
+ `;
292
+
293
+ // ../primitives-web/src/Input.tsx
294
+ import { forwardRef } from "react";
295
+ import styled6 from "styled-components";
296
+ import { jsx as jsx6 } from "react/jsx-runtime";
297
+ var StyledInput = styled6.input`
298
+ background: transparent;
299
+ border: none;
300
+ outline: none;
301
+ width: 100%;
302
+ height: 100%;
303
+ padding: 0;
304
+ margin: 0;
305
+ color: ${(props) => props.color || "inherit"};
306
+ font-size: ${(props) => typeof props.fontSize === "number" ? `${props.fontSize}px` : props.fontSize || "inherit"};
307
+ font-family: inherit;
308
+ text-align: inherit;
309
+
310
+ &::placeholder {
311
+ color: ${(props) => props.placeholderTextColor || "rgba(255, 255, 255, 0.5)"};
312
+ }
313
+
314
+ &:disabled {
315
+ cursor: not-allowed;
316
+ }
317
+ `;
318
+ var InputPrimitive = forwardRef(
319
+ ({
320
+ value,
321
+ placeholder,
322
+ onChange,
323
+ onChangeText,
324
+ onFocus,
325
+ onBlur,
326
+ onKeyDown,
327
+ disabled,
328
+ secureTextEntry,
329
+ style,
330
+ color,
331
+ fontSize,
332
+ placeholderTextColor,
333
+ maxLength,
334
+ name,
335
+ type,
336
+ inputMode,
337
+ autoComplete,
338
+ id,
339
+ "aria-invalid": ariaInvalid,
340
+ "aria-describedby": ariaDescribedBy,
341
+ "aria-labelledby": ariaLabelledBy,
342
+ "aria-label": ariaLabel,
343
+ "aria-disabled": ariaDisabled,
344
+ "data-testid": dataTestId,
345
+ ...rest
346
+ }, ref) => {
347
+ const handleChange = (e) => {
348
+ if (onChange) {
349
+ onChange(e);
350
+ }
351
+ if (onChangeText) {
352
+ onChangeText(e.target.value);
353
+ }
354
+ };
355
+ const inputValue = value !== void 0 ? value : "";
356
+ return /* @__PURE__ */ jsx6(
357
+ StyledInput,
358
+ {
359
+ ref,
360
+ id,
361
+ value: inputValue,
362
+ name,
363
+ placeholder,
364
+ onChange: handleChange,
365
+ onFocus,
366
+ onBlur,
367
+ onKeyDown,
368
+ disabled,
369
+ type: secureTextEntry ? "password" : type || "text",
370
+ inputMode,
371
+ autoComplete,
372
+ style,
373
+ color,
374
+ fontSize,
375
+ placeholderTextColor,
376
+ maxLength,
377
+ "aria-invalid": ariaInvalid,
378
+ "aria-describedby": ariaDescribedBy,
379
+ "aria-labelledby": ariaLabelledBy,
380
+ "aria-label": ariaLabel,
381
+ "aria-disabled": ariaDisabled,
382
+ "data-testid": dataTestId,
383
+ ...rest
384
+ }
385
+ );
386
+ }
387
+ );
388
+ InputPrimitive.displayName = "InputPrimitive";
389
+
390
+ // ../primitives-web/src/TextArea.tsx
391
+ import { forwardRef as forwardRef2 } from "react";
392
+ import styled7 from "styled-components";
393
+ import { jsx as jsx7 } from "react/jsx-runtime";
394
+ var StyledTextArea = styled7.textarea`
395
+ background: transparent;
396
+ border: none;
397
+ outline: none;
398
+ width: 100%;
399
+ height: 100%;
400
+ padding: 0;
401
+ margin: 0;
402
+ color: ${(props) => props.color || "inherit"};
403
+ font-size: ${(props) => typeof props.fontSize === "number" ? `${props.fontSize}px` : props.fontSize || "inherit"};
404
+ font-family: inherit;
405
+ text-align: inherit;
406
+ resize: none;
407
+
408
+ &::placeholder {
409
+ color: ${(props) => props.placeholderTextColor || "rgba(255, 255, 255, 0.5)"};
410
+ }
411
+
412
+ &:disabled {
413
+ cursor: not-allowed;
414
+ }
415
+ `;
416
+ var TextAreaPrimitive = forwardRef2(
417
+ ({
418
+ value,
419
+ placeholder,
420
+ onChangeText,
421
+ onFocus,
422
+ onBlur,
423
+ onKeyDown,
424
+ disabled,
425
+ style,
426
+ color,
427
+ fontSize,
428
+ placeholderTextColor,
429
+ maxLength,
430
+ rows
431
+ }, ref) => {
432
+ return /* @__PURE__ */ jsx7(
433
+ StyledTextArea,
434
+ {
435
+ ref,
436
+ value,
437
+ placeholder,
438
+ onChange: (e) => onChangeText?.(e.target.value),
439
+ onFocus,
440
+ onBlur,
441
+ onKeyDown,
442
+ disabled,
443
+ style,
444
+ color,
445
+ fontSize,
446
+ placeholderTextColor,
447
+ maxLength,
448
+ rows
449
+ }
450
+ );
451
+ }
452
+ );
453
+ TextAreaPrimitive.displayName = "TextAreaPrimitive";
454
+
455
+ // src/InputCopy.tsx
456
+ import { Input } from "@xsolla/xui-input";
457
+ import { Copy, Check, Eye, EyeOff } from "@xsolla/xui-icons";
458
+ import { useDesignSystem, useId } from "@xsolla/xui-core";
459
+ import { jsx as jsx8, jsxs } from "react/jsx-runtime";
460
+ var InputCopy = forwardRef3(
461
+ ({
462
+ value = "",
463
+ onCopy,
464
+ onChange,
465
+ onChangeText,
466
+ size = "m",
467
+ disabled = false,
468
+ label,
469
+ errorMessage,
470
+ error,
471
+ secureTextEntry = false,
472
+ initialVisible = false,
473
+ id: providedId,
474
+ "aria-label": ariaLabel,
475
+ testID,
476
+ ...props
477
+ }, ref) => {
478
+ const { theme } = useDesignSystem();
479
+ const [copied, setCopied] = useState(false);
480
+ const [isVisible, setIsVisible] = useState(
481
+ secureTextEntry ? initialVisible : true
482
+ );
483
+ const [internalValue, setInternalValue] = useState(value);
484
+ const inputRef = useRef(null);
485
+ const rawId = useId();
486
+ const safeId = rawId.replace(/:/g, "");
487
+ const inputId = providedId || `input-copy-${safeId}`;
488
+ const labelId = `${inputId}-label`;
489
+ const errorId = `${inputId}-error`;
490
+ React4.useImperativeHandle(
491
+ ref,
492
+ () => inputRef.current,
493
+ []
494
+ );
495
+ useEffect(() => {
496
+ setInternalValue(value);
497
+ }, [value]);
498
+ const isDisable = disabled;
499
+ const isError = !!(errorMessage || error);
500
+ const sizeStyles = theme.sizing.input(size);
501
+ const inputColors = theme.colors.control.input;
502
+ const borderRadiusConfig = {
503
+ xl: 4,
504
+ l: 4,
505
+ m: 2,
506
+ s: 2,
507
+ xs: 2
508
+ };
509
+ const iconSizeConfig = {
510
+ xl: 18,
511
+ l: 18,
512
+ m: 18,
513
+ s: 16,
514
+ xs: 16
515
+ };
516
+ const borderRadius = borderRadiusConfig[size];
517
+ const iconSize = iconSizeConfig[size];
518
+ const handleCopy = async () => {
519
+ if (internalValue && !isDisable) {
520
+ try {
521
+ if (typeof navigator !== "undefined" && navigator.clipboard?.writeText) {
522
+ await navigator.clipboard.writeText(String(internalValue));
523
+ } else {
524
+ throw new Error("Clipboard API not available");
525
+ }
526
+ setCopied(true);
527
+ onCopy?.(String(internalValue));
528
+ } catch {
529
+ setCopied(false);
530
+ return;
531
+ }
532
+ setTimeout(() => setCopied(false), 2e3);
533
+ }
534
+ };
535
+ const handleChange = (e) => {
536
+ const newValue = e.target.value;
537
+ setInternalValue(newValue);
538
+ if (onChange) onChange(e);
539
+ if (onChangeText) onChangeText(newValue);
540
+ };
541
+ const toggleVisibility = () => {
542
+ if (!isDisable) {
543
+ setIsVisible(!isVisible);
544
+ }
545
+ };
546
+ const iconColor = isDisable ? inputColors.placeholder : inputColors.text;
547
+ const copyIconColor = isDisable ? inputColors.placeholder : copied ? theme.colors.content.success.secondary : inputColors.text;
548
+ let buttonBgColor = inputColors.bg;
549
+ if (isDisable) {
550
+ buttonBgColor = inputColors.bgDisable;
551
+ }
552
+ let buttonBorderColor = inputColors.border;
553
+ if (isDisable) {
554
+ buttonBorderColor = inputColors.borderDisable;
555
+ }
556
+ const VisibilityToggle = secureTextEntry ? /* @__PURE__ */ jsx8(
557
+ Box,
558
+ {
559
+ as: "button",
560
+ type: "button",
561
+ onPress: toggleVisibility,
562
+ cursor: isDisable ? "default" : "pointer",
563
+ alignItems: "center",
564
+ justifyContent: "center",
565
+ backgroundColor: "transparent",
566
+ borderWidth: 0,
567
+ "aria-label": isVisible ? "Hide text" : "Show text",
568
+ "aria-pressed": isVisible,
569
+ "data-testid": "input-copy__visibility-toggle",
570
+ children: isVisible ? /* @__PURE__ */ jsx8(EyeOff, { size: iconSize, color: iconColor }) : /* @__PURE__ */ jsx8(Eye, { size: iconSize, color: iconColor })
571
+ }
572
+ ) : null;
573
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", gap: 8, width: "100%", testID, children: [
574
+ label && /* @__PURE__ */ jsx8(Box, { as: "label", id: labelId, htmlFor: inputId, children: /* @__PURE__ */ jsx8(
575
+ Text,
576
+ {
577
+ color: theme.colors.content.secondary,
578
+ fontSize: sizeStyles.fontSize - 2,
579
+ fontWeight: "500",
580
+ children: label
581
+ }
582
+ ) }),
583
+ /* @__PURE__ */ jsxs(Box, { flexDirection: "row", width: "100%", gap: 2, children: [
584
+ /* @__PURE__ */ jsx8(Box, { flex: 1, children: /* @__PURE__ */ jsx8(
585
+ Input,
586
+ {
587
+ ...props,
588
+ ref: inputRef,
589
+ id: inputId,
590
+ value: internalValue,
591
+ onChange: handleChange,
592
+ size,
593
+ disabled,
594
+ error: isError,
595
+ type: secureTextEntry && !isVisible ? "password" : "text",
596
+ iconRight: VisibilityToggle,
597
+ borderTopRightRadius: 0,
598
+ borderBottomRightRadius: 0,
599
+ "aria-label": !label ? ariaLabel : void 0,
600
+ "aria-labelledby": label ? labelId : void 0,
601
+ "aria-describedby": errorMessage ? errorId : void 0,
602
+ "aria-invalid": isError || void 0,
603
+ label: void 0,
604
+ errorMessage: void 0,
605
+ testID: "input-copy__field"
606
+ }
607
+ ) }),
608
+ /* @__PURE__ */ jsx8(
609
+ Box,
610
+ {
611
+ as: "button",
612
+ type: "button",
613
+ width: sizeStyles.height,
614
+ height: sizeStyles.height,
615
+ backgroundColor: buttonBgColor,
616
+ borderColor: buttonBorderColor,
617
+ borderWidth: 1,
618
+ borderTopRightRadius: borderRadius,
619
+ borderBottomRightRadius: borderRadius,
620
+ borderBottomLeftRadius: 0,
621
+ borderTopLeftRadius: 0,
622
+ alignItems: "center",
623
+ justifyContent: "center",
624
+ onPress: handleCopy,
625
+ cursor: isDisable ? "default" : "pointer",
626
+ disabled: isDisable,
627
+ "aria-label": copied ? "Copied" : "Copy to clipboard",
628
+ "aria-disabled": isDisable || void 0,
629
+ "data-testid": "input-copy__copy-button",
630
+ style: { background: buttonBgColor, opacity: 1 },
631
+ hoverStyle: !isDisable && !isError ? {
632
+ backgroundColor: inputColors.bgHover,
633
+ borderColor: inputColors.borderHover
634
+ } : void 0,
635
+ children: /* @__PURE__ */ jsx8(Icon, { size: iconSize, color: copyIconColor, children: copied ? /* @__PURE__ */ jsx8(Check, {}) : /* @__PURE__ */ jsx8(Copy, {}) })
636
+ }
637
+ )
638
+ ] }),
639
+ isError && errorMessage && /* @__PURE__ */ jsx8(
640
+ Text,
641
+ {
642
+ id: errorId,
643
+ role: "alert",
644
+ color: theme.colors.content.alert.primary,
645
+ fontSize: sizeStyles.fontSize - 2,
646
+ children: errorMessage
647
+ }
648
+ )
649
+ ] });
650
+ }
651
+ );
652
+ InputCopy.displayName = "InputCopy";
653
+ export {
654
+ InputCopy
655
+ };
656
+ //# sourceMappingURL=index.mjs.map