@xsolla/xui-input 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,745 @@
1
+ // src/Input.tsx
2
+ import React4, { useState, forwardRef as forwardRef3, useRef, useEffect } 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/Input.tsx
456
+ import { useDesignSystem, useId } from "@xsolla/xui-core";
457
+ import { Check, X } from "@xsolla/xui-icons";
458
+ import { jsx as jsx8, jsxs } from "react/jsx-runtime";
459
+ var Input = forwardRef3(
460
+ ({
461
+ value,
462
+ placeholder,
463
+ onChange,
464
+ onChangeText,
465
+ onKeyDown,
466
+ size = "m",
467
+ disabled = false,
468
+ name,
469
+ label,
470
+ errorMessage,
471
+ error,
472
+ iconLeft,
473
+ iconRight,
474
+ iconRightSize,
475
+ extraClear = false,
476
+ onRemove,
477
+ checked = false,
478
+ checkedIcon = /* @__PURE__ */ jsx8(Check, {}),
479
+ type,
480
+ id: providedId,
481
+ "aria-label": ariaLabel,
482
+ borderTopLeftRadius: borderTopLeftRadiusOverride,
483
+ borderTopRightRadius: borderTopRightRadiusOverride,
484
+ borderBottomLeftRadius: borderBottomLeftRadiusOverride,
485
+ borderBottomRightRadius: borderBottomRightRadiusOverride,
486
+ backgroundColor: backgroundColorProp,
487
+ testID,
488
+ ...rest
489
+ }, ref) => {
490
+ const { theme } = useDesignSystem();
491
+ const [internalState, setInternalState] = useState(
492
+ "default"
493
+ );
494
+ const [passValue, setPassValue] = useState(value ?? "");
495
+ const inputRef = useRef(null);
496
+ const rawId = useId();
497
+ const safeId = rawId.replace(/:/g, "");
498
+ const inputId = providedId || `input-${safeId}`;
499
+ const labelId = `${inputId}-label`;
500
+ const errorId = `${inputId}-error`;
501
+ React4.useImperativeHandle(
502
+ ref,
503
+ () => inputRef.current,
504
+ []
505
+ );
506
+ useEffect(() => {
507
+ if (value !== void 0) {
508
+ setPassValue(value);
509
+ }
510
+ }, [value]);
511
+ const isDisable = disabled;
512
+ const isError = !!(errorMessage || error);
513
+ const isFocus = internalState === "focus";
514
+ const isLeftInputIconShown = !!iconLeft;
515
+ const isRightInputIconShown = !!iconRight;
516
+ const isCheckedShown = checked && !errorMessage;
517
+ const isExtraClearIconShown = !disabled && extraClear && !!passValue;
518
+ const extrasCount = Number(isExtraClearIconShown) + Number(isCheckedShown) + Number(isRightInputIconShown);
519
+ const sizeStyles = theme.sizing.input(size);
520
+ const inputColors = theme.colors.control.input;
521
+ const handleFocus = () => {
522
+ if (!isDisable) {
523
+ setInternalState("focus");
524
+ }
525
+ };
526
+ const handleBlur = () => {
527
+ if (!isDisable) {
528
+ setInternalState("default");
529
+ }
530
+ };
531
+ const handleChange = (e) => {
532
+ const newValue = e.target.value;
533
+ if (onChange) {
534
+ onChange(e);
535
+ }
536
+ if (onChangeText) {
537
+ onChangeText(newValue);
538
+ }
539
+ setPassValue(newValue);
540
+ };
541
+ const handleKeyDown = (e) => {
542
+ if (e.key === "Escape") {
543
+ e.currentTarget.blur();
544
+ }
545
+ if (onKeyDown) {
546
+ onKeyDown(e);
547
+ }
548
+ };
549
+ const handleClear = (e) => {
550
+ e.stopPropagation();
551
+ setPassValue("");
552
+ onRemove?.();
553
+ if (inputRef.current) {
554
+ if (typeof window !== "undefined" && window.HTMLInputElement) {
555
+ const nativeInputValueSetter = Object.getOwnPropertyDescriptor(
556
+ window.HTMLInputElement.prototype,
557
+ "value"
558
+ )?.set;
559
+ if (nativeInputValueSetter) {
560
+ nativeInputValueSetter.call(inputRef.current, "");
561
+ }
562
+ }
563
+ const syntheticEvent = {
564
+ target: inputRef.current,
565
+ currentTarget: inputRef.current,
566
+ type: "change"
567
+ };
568
+ onChange?.(syntheticEvent);
569
+ inputRef.current.focus();
570
+ }
571
+ };
572
+ let backgroundColor = backgroundColorProp || inputColors.bg;
573
+ let borderColor = inputColors.border;
574
+ let outlineColor;
575
+ if (isDisable) {
576
+ backgroundColor = inputColors.bgDisable;
577
+ borderColor = inputColors.borderDisable;
578
+ } else if (isError) {
579
+ outlineColor = theme.colors.border.alert;
580
+ if (isFocus) {
581
+ backgroundColor = theme.colors.control.focus.bg;
582
+ }
583
+ } else if (isFocus) {
584
+ backgroundColor = theme.colors.control.focus.bg;
585
+ outlineColor = theme.colors.border.brand;
586
+ }
587
+ const textColor = isDisable ? inputColors.textDisable : inputColors.text;
588
+ const placeholderColor = inputColors.placeholder;
589
+ const paddingConfig = {
590
+ xl: { vertical: 12, horizontal: 12 },
591
+ l: { vertical: 14, horizontal: 12 },
592
+ m: { vertical: 11, horizontal: 12 },
593
+ s: { vertical: 7, horizontal: 10 },
594
+ xs: { vertical: 7, horizontal: 10 }
595
+ };
596
+ const borderRadiusConfig = {
597
+ xl: 4,
598
+ l: 4,
599
+ m: 2,
600
+ s: 2,
601
+ xs: 2
602
+ };
603
+ const iconSizeConfig = {
604
+ xl: 18,
605
+ l: 18,
606
+ m: 18,
607
+ s: 16,
608
+ xs: 16
609
+ };
610
+ const focusOutlineConfig = {
611
+ xl: { width: 2, offset: -2 },
612
+ l: { width: 2, offset: -2 },
613
+ m: { width: 1, offset: -1 },
614
+ s: { width: 1, offset: -1 },
615
+ xs: { width: 1, offset: -1 }
616
+ };
617
+ const padding = paddingConfig[size];
618
+ const borderRadius = borderRadiusConfig[size];
619
+ const iconSize = iconSizeConfig[size];
620
+ const focusOutline = focusOutlineConfig[size];
621
+ return /* @__PURE__ */ jsxs(Box, { flexDirection: "column", gap: 8, width: "100%", testID, children: [
622
+ label && /* @__PURE__ */ jsx8(Box, { as: "label", id: labelId, children: /* @__PURE__ */ jsx8(
623
+ Text,
624
+ {
625
+ color: theme.colors.content.secondary,
626
+ fontSize: sizeStyles.fontSize - 2,
627
+ fontWeight: "500",
628
+ children: label
629
+ }
630
+ ) }),
631
+ /* @__PURE__ */ jsxs(
632
+ Box,
633
+ {
634
+ backgroundColor,
635
+ borderColor,
636
+ borderWidth: borderColor !== "transparent" ? 1 : 0,
637
+ borderRadius,
638
+ borderTopLeftRadius: borderTopLeftRadiusOverride,
639
+ borderTopRightRadius: borderTopRightRadiusOverride,
640
+ borderBottomLeftRadius: borderBottomLeftRadiusOverride,
641
+ borderBottomRightRadius: borderBottomRightRadiusOverride,
642
+ height: sizeStyles.height,
643
+ paddingVertical: padding.vertical,
644
+ paddingHorizontal: padding.horizontal,
645
+ flexDirection: "row",
646
+ alignItems: "center",
647
+ gap: 10,
648
+ position: "relative",
649
+ style: {
650
+ ...outlineColor ? {
651
+ outline: `${focusOutline.width}px solid ${outlineColor}`,
652
+ outlineOffset: `${focusOutline.offset}px`
653
+ } : {}
654
+ },
655
+ hoverStyle: !isDisable && !isFocus && !isError ? {
656
+ backgroundColor: inputColors.bgHover,
657
+ borderColor: inputColors.borderHover
658
+ } : void 0,
659
+ children: [
660
+ isLeftInputIconShown && /* @__PURE__ */ jsx8(Box, { alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsx8(Icon, { size: iconSize, color: textColor, children: iconLeft }) }),
661
+ /* @__PURE__ */ jsx8(Box, { flex: 1, height: "100%", justifyContent: "center", children: /* @__PURE__ */ jsx8(
662
+ InputPrimitive,
663
+ {
664
+ ref: inputRef,
665
+ id: inputId,
666
+ value: passValue,
667
+ name,
668
+ placeholder,
669
+ onChange: handleChange,
670
+ onFocus: handleFocus,
671
+ onBlur: handleBlur,
672
+ onKeyDown: handleKeyDown,
673
+ disabled: isDisable,
674
+ type: type || "text",
675
+ color: textColor,
676
+ fontSize: sizeStyles.fontSize,
677
+ placeholderTextColor: placeholderColor,
678
+ "aria-invalid": isError || void 0,
679
+ "aria-describedby": errorMessage ? errorId : void 0,
680
+ "aria-labelledby": label ? labelId : void 0,
681
+ "aria-label": !label ? ariaLabel : void 0,
682
+ "aria-disabled": isDisable || void 0,
683
+ "data-testid": "input__field",
684
+ ...rest
685
+ }
686
+ ) }),
687
+ extrasCount > 0 && /* @__PURE__ */ jsxs(Box, { flexDirection: "row", alignItems: "center", gap: 4, children: [
688
+ isExtraClearIconShown && /* @__PURE__ */ jsx8(
689
+ Box,
690
+ {
691
+ as: "button",
692
+ type: "button",
693
+ alignItems: "center",
694
+ justifyContent: "center",
695
+ width: iconSize,
696
+ height: "100%",
697
+ backgroundColor: "transparent",
698
+ borderWidth: 0,
699
+ cursor: disabled ? "not-allowed" : "pointer",
700
+ onPress: !disabled ? handleClear : void 0,
701
+ disabled,
702
+ "data-testid": "input__extra-clear-button",
703
+ children: /* @__PURE__ */ jsx8(Icon, { size: iconSize, color: textColor, children: /* @__PURE__ */ jsx8(X, {}) })
704
+ }
705
+ ),
706
+ isCheckedShown && /* @__PURE__ */ jsx8(
707
+ Box,
708
+ {
709
+ alignItems: "center",
710
+ justifyContent: "center",
711
+ width: iconSize,
712
+ height: "100%",
713
+ children: /* @__PURE__ */ jsx8(
714
+ Icon,
715
+ {
716
+ size: iconSize,
717
+ color: theme.colors.content.success.primary,
718
+ children: checkedIcon
719
+ }
720
+ )
721
+ }
722
+ ),
723
+ isRightInputIconShown && /* @__PURE__ */ jsx8(Box, { alignItems: "center", justifyContent: "center", children: /* @__PURE__ */ jsx8(Icon, { size: iconRightSize || iconSize, color: textColor, children: iconRight }) })
724
+ ] })
725
+ ]
726
+ }
727
+ ),
728
+ errorMessage && /* @__PURE__ */ jsx8(
729
+ Text,
730
+ {
731
+ id: errorId,
732
+ role: "alert",
733
+ color: theme.colors.content.alert.primary,
734
+ fontSize: sizeStyles.fontSize - 2,
735
+ children: errorMessage
736
+ }
737
+ )
738
+ ] });
739
+ }
740
+ );
741
+ Input.displayName = "Input";
742
+ export {
743
+ Input
744
+ };
745
+ //# sourceMappingURL=index.mjs.map