@xsolla/xui-input-edit 0.176.0

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 @@
1
+ {"version":3,"sources":["../../src/index.tsx","../../src/InputEdit.tsx","../../../../foundation/primitives-web/src/Box.tsx","../../../../foundation/primitives-web/src/filterDOMProps.ts","../../../../../node_modules/@emotion/memoize/dist/memoize.esm.js","../../../../../node_modules/@emotion/is-prop-valid/dist/is-prop-valid.esm.js","../../../../foundation/primitives-web/src/Text.tsx","../../../../foundation/primitives-web/src/Icon.tsx","../../../../foundation/primitives-web/src/TextArea.tsx","../../../../foundation/primitives-web/src/index.tsx"],"sourcesContent":["export * from \"./InputEdit\";\n","import React, {\n useState,\n useRef,\n useEffect,\n forwardRef,\n type TextareaHTMLAttributes,\n type ReactNode,\n} from \"react\";\n// prettier-ignore\n// @ts-expect-error - this will be resolved at build time\nimport { Box, Text, Icon, TextAreaPrimitive, isWeb } from \"@xsolla/xui-primitives\";\nimport {\n useResolvedTheme,\n useId,\n type ThemeOverrideProps,\n} from \"@xsolla/xui-core\";\nimport { Edit, Check, Remove } from \"@xsolla/xui-icons-base\";\n\ntype InputEditMode = \"inline\" | \"form\";\n\n/**\n * Named typography styles, resolved from the theme's typography tokens. Drives the\n * field's font family / size / weight / line-height so the text can match surrounding\n * content (e.g. a heading) rather than only the fixed body sizes.\n */\ntype InputEditTextStyle =\n | \"h1\"\n | \"h2\"\n | \"h3\"\n | \"h4\"\n | \"h5\"\n | \"display\"\n | \"body-lg\"\n | \"body-md\"\n | \"body-sm\"\n | \"body-xs\"\n | \"body-xxs\";\n\nexport interface InputEditProps\n extends\n Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n \"size\" | \"onChange\" | \"value\" | \"defaultValue\"\n >,\n ThemeOverrideProps {\n /**\n * Controlled value of the field.\n */\n value?: string;\n /**\n * Initial value for uncontrolled usage.\n */\n defaultValue?: string;\n /**\n * Placeholder shown when the field is empty.\n */\n placeholder?: string;\n /**\n * Change handler receiving the current text (HTML when `richText` is set).\n */\n onChangeText?: (text: string) => void;\n /**\n * Called when the edit is confirmed (check button or `Cmd`/`Ctrl` + `Enter`).\n */\n onConfirm?: (value: string) => void;\n /**\n * Called when the edit is cancelled (cross button or `Escape`). The value is reverted.\n */\n onCancel?: () => void;\n /**\n * Minimum number of visible text rows while editing.\n */\n rows?: number;\n /**\n * Show the floating confirm / cancel control while editing.\n */\n editControl?: boolean;\n /**\n * Show the edit affordance icon in display mode.\n */\n icon?: boolean;\n /**\n * Override the default edit (pencil) icon.\n */\n editIcon?: ReactNode;\n /**\n * Optional formatting toolbar shown in a floating bar below the field while editing\n * (e.g. text-align / bold / link `IconButton`s). Rendered to the left, mirroring the\n * confirm / cancel control on the right.\n */\n tools?: ReactNode;\n /**\n * Activation mode. `\"inline\"` (default) rests as plain text and reveals the editor on\n * click; `\"form\"` is always an open, editable field (like a standard form text area).\n */\n mode?: InputEditMode;\n /**\n * Named typography style applied to the text and editor (e.g. `\"h1\"`, `\"body-lg\"`).\n * Overrides the default font.\n */\n textStyle?: InputEditTextStyle;\n /**\n * Enable rich-text editing (web only). The field becomes a `contenteditable` surface\n * and `value` / `onChangeText` / `onConfirm` carry HTML. Wire a toolbar via `tools`\n * using `document.execCommand`. Falls back to a plain text field on React Native.\n * The HTML is not sanitized — sanitize before rendering untrusted values.\n */\n richText?: boolean;\n /**\n * Disable the control.\n */\n disabled?: boolean;\n /**\n * Highlight the control as invalid.\n */\n error?: boolean;\n /**\n * Error message displayed below the field (implies `error`).\n */\n errorMessage?: string;\n /**\n * Unique identifier for the input element. Used for accessibility linking.\n */\n id?: string;\n /**\n * Accessible label for screen readers (use when no visible label is present).\n */\n \"aria-label\"?: string;\n /**\n * ID of an external element that labels the field (e.g. a heading placed above it).\n */\n \"aria-labelledby\"?: string;\n /**\n * Test identifier.\n */\n testID?: string;\n /**\n * Optional class name applied to the root element (web).\n */\n className?: string;\n}\n\n// InputEdit has a single size (per the design). `textStyle` can still override the font.\nconst FIELD = {\n fontSize: 16,\n lineHeight: 18,\n framePadding: 11,\n iconSize: 16,\n};\n\n// Strip tags from an HTML value — used for empty detection and the native plain-text\n// fallback (React Native can't render contenteditable HTML inline).\nconst stripHtml = (html: string): string =>\n html.replace(/<[^>]*>/g, \"\").replace(/&nbsp;/gi, \" \");\n\nconst CONTROL_ICON_SIZE = 18;\nconst POPOVER_SHADOW =\n \"0px 6px 10px 4px rgba(7, 7, 8, 0.1), 0px 2px 3px 0px rgba(7, 7, 8, 0.2)\";\n// drop-shadow variant — follows the element's alpha shape so it wraps the bubble's\n// pointer (a plain box-shadow would clip at the rectangle edge).\nconst POPOVER_DROP_SHADOW =\n \"drop-shadow(0 6px 10px rgba(7, 7, 8, 0.1)) drop-shadow(0 2px 3px rgba(7, 7, 8, 0.2))\";\n\n/**\n * A multi-line text field for editing freeform text. In `\"inline\"` mode it rests as\n * plain text and reveals a highlighted editor on click; in `\"form\"` mode it is always\n * an open, editable field. `Enter` inserts a new line; confirm via the floating control\n * or `Cmd`/`Ctrl` + `Enter`; clicking outside also commits. `Escape` cancels and\n * reverts.\n */\nexport const InputEdit = forwardRef<\n HTMLTextAreaElement | HTMLDivElement,\n InputEditProps\n>(\n (\n {\n value,\n defaultValue,\n placeholder = \"Placeholder\",\n onChangeText,\n onConfirm,\n onCancel,\n onKeyDown,\n editControl = true,\n icon = true,\n editIcon,\n tools,\n rows,\n mode = \"inline\",\n textStyle,\n richText = false,\n disabled = false,\n error = false,\n errorMessage,\n id: providedId,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n testID,\n className,\n themeMode,\n themeProductContext,\n ...rest\n },\n ref\n ) => {\n const { theme } = useResolvedTheme({ themeMode, themeProductContext });\n\n const isControlled = value !== undefined;\n const [internalValue, setInternalValue] = useState(\n value ?? defaultValue ?? \"\"\n );\n const currentValue = isControlled ? (value as string) : internalValue;\n\n const isFormMode = mode === \"form\";\n // In form mode the editor is always rendered; in inline mode it appears on activation.\n const [isEditing, setIsEditing] = useState(false);\n const editing = isFormMode || isEditing;\n // Whether the editor currently holds focus — gates the floating controls so a form\n // with several fields doesn't show controls on every one at rest.\n const [focused, setFocused] = useState(false);\n // The \"active\" (focus-styled, controls-visible) state. Inline mode keys off the edit\n // session (controls appear the moment you click, before focus lands); form mode keys\n // off real focus (so resting fields stay quiet).\n const active = isFormMode ? focused : isEditing;\n // Rich text only applies on web (contenteditable is DOM-only); native falls back to\n // the plain textarea.\n const richEnabled = richText && isWeb;\n const inputRef = useRef<HTMLTextAreaElement>(null);\n const editableRef = useRef<HTMLDivElement>(null);\n const focusField = () => {\n if (richEnabled) editableRef.current?.focus();\n else inputRef.current?.focus();\n };\n // Last value reported via onConfirm (or the initial value) — used to dedupe commits\n // and to revert on cancel.\n const committedValue = useRef(currentValue);\n // Measured height of the field box, so the floating controls follow it as the\n // multi-line field grows.\n const [fieldHeight, setFieldHeight] = useState<number | null>(null);\n\n // Generate a unique, ARIA-safe id (useId() yields colons that are invalid in id attrs).\n const rawId = useId();\n const safeId = rawId.replace(/:/g, \"\");\n const inputId = providedId || `input-edit-${safeId}`;\n const errorId = `${inputId}-error`;\n const triggerId = `${inputId}-trigger`;\n\n // Return focus to the display trigger so keyboard users are not dropped to the body.\n const focusTrigger = () => {\n if (isWeb) {\n setTimeout(() => document.getElementById(triggerId)?.focus(), 0);\n }\n };\n\n // In rich mode the underlying element is the contenteditable div, not a textarea —\n // exposed honestly so consumers don't read `.value` off a div.\n React.useImperativeHandle(\n ref,\n () =>\n (richEnabled ? editableRef.current : inputRef.current) as\n | HTMLTextAreaElement\n | HTMLDivElement,\n [richEnabled]\n );\n\n // Keep internal value in sync with the controlled value. An externally-set value is\n // treated as the committed baseline.\n useEffect(() => {\n if (value !== undefined) {\n setInternalValue(value);\n committedValue.current = value;\n }\n }, [value]);\n\n // Auto-grow the field to fit its content (multi-line), so the height tracks the text\n // without an inner scrollbar. The contenteditable div grows on its own; the textarea\n // needs its height reset and re-measured.\n const autoSize = () => {\n if (!isWeb) return;\n if (richEnabled) {\n // innerHTML is set imperatively just before this runs, so the div hasn't been\n // laid out yet — measure after the next paint or the height is stale on entry.\n requestAnimationFrame(() => {\n const el = editableRef.current;\n if (el) setFieldHeight(el.offsetHeight + FIELD.framePadding * 2);\n });\n return;\n }\n const el = inputRef.current;\n if (!el) return;\n el.style.height = \"auto\";\n el.style.height = `${el.scrollHeight}px`;\n setFieldHeight(el.scrollHeight + FIELD.framePadding * 2);\n };\n\n useEffect(() => {\n if (!editing) return;\n // Controlled contenteditable: write innerHTML only when the incoming value differs\n // from the DOM, so echoing our own input doesn't reset the caret.\n if (richEnabled) {\n const el = editableRef.current;\n if (el && el.innerHTML !== currentValue) el.innerHTML = currentValue;\n }\n autoSize();\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [editing, currentValue, richEnabled]);\n\n const isError = !!(error || errorMessage);\n // For rich values, \"empty\" means no visible text once tags are stripped.\n const isFilled = richText\n ? stripHtml(currentValue).trim().length > 0\n : currentValue.length > 0;\n // Plain-text projection of the value — used by the textarea and the native fallback.\n const plainText = richText ? stripHtml(currentValue) : currentValue;\n const inputColors = theme.colors.control.input;\n const borderRadius = theme.shape.input.md.borderRadius;\n\n // Resolve effective typography: a named textStyle (heading/body token) overrides the\n // size-derived font. Padding / icon size always come from `size`.\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const typo = theme.typographyTokens as any;\n const textStyleToken = textStyle\n ? (typo.heading[textStyle] ?? typo.basic[textStyle])\n : null;\n const fontSize = textStyleToken ? textStyleToken.fontSize : FIELD.fontSize;\n const lineHeight = textStyleToken\n ? parseInt(String(textStyleToken.lineHeight), 10)\n : FIELD.lineHeight;\n const fontWeight = textStyleToken ? textStyleToken.fontWeight : 400;\n const fontFamily =\n textStyleToken && textStyleToken.lineHeightCategory === \"display\"\n ? theme.fonts.heading\n : theme.fonts.body;\n\n // Vertical offset for the floating controls — just below the field's bottom edge.\n // Defaults to the single-line height before the field has been measured.\n const controlsTop =\n (fieldHeight ?? lineHeight + FIELD.framePadding * 2) -\n FIELD.framePadding +\n 4;\n\n const enterEdit = () => {\n if (disabled || isEditing) return;\n setIsEditing(true);\n // Focus the field once it has mounted.\n setTimeout(focusField, 0);\n };\n\n // Rich-text input: read the contenteditable's HTML on each edit.\n const handleRichInput = (e: React.FormEvent<HTMLDivElement>) => {\n handleChangeText(e.currentTarget.innerHTML);\n };\n\n // Paste as plain text to avoid importing foreign markup/styles (no sanitizer here).\n const handlePaste = (e: React.ClipboardEvent<HTMLDivElement>) => {\n e.preventDefault();\n const text = e.clipboardData.getData(\"text/plain\");\n document.execCommand(\"insertText\", false, text);\n };\n\n const handleChangeText = (next: string) => {\n onChangeText?.(next);\n if (!isControlled) {\n setInternalValue(next);\n }\n };\n\n // Explicit confirm (button / shortcut) always reports the value — it is a deliberate\n // save action.\n const commitExplicit = () => {\n onConfirm?.(currentValue);\n committedValue.current = currentValue;\n };\n\n // Commit on blur only when the value actually changed, so clicking in and out (or a\n // confirm immediately followed by the unmount blur) doesn't re-fire onConfirm.\n const commitOnBlur = () => {\n if (currentValue !== committedValue.current) {\n onConfirm?.(currentValue);\n committedValue.current = currentValue;\n }\n };\n\n // Inline mode collapses back to the plain-text display; form mode stays open.\n const exitEdit = () => {\n if (!isFormMode) {\n setIsEditing(false);\n setFocused(false);\n focusTrigger();\n }\n };\n\n const handleConfirm = () => {\n commitExplicit();\n exitEdit();\n };\n\n const handleCancel = () => {\n // Revert to the last committed value.\n if (!isControlled) {\n setInternalValue(committedValue.current);\n }\n onCancel?.();\n exitEdit();\n };\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n // Enter inserts a new line (multi-line). Confirm with Cmd/Ctrl + Enter.\n // These gestures are consumed by the component (use onConfirm / onCancel), so the\n // forwarded onKeyDown does not also fire for them.\n if (e.key === \"Enter\" && (e.metaKey || e.ctrlKey)) {\n e.preventDefault();\n handleConfirm();\n return;\n }\n if (e.key === \"Escape\") {\n e.preventDefault();\n handleCancel();\n return;\n }\n onKeyDown?.(e as React.KeyboardEvent<HTMLTextAreaElement>);\n };\n\n const handleFocus = () => setFocused(true);\n\n // Clicking outside commits the current value. Control / tool buttons prevent blur\n // via onMouseDown, so they fire their own action instead of committing here.\n const handleBlur = () => {\n setFocused(false);\n commitOnBlur();\n if (!isFormMode) {\n setIsEditing(false);\n }\n };\n\n // Resolve background / border colors based on state. Error takes precedence over\n // the focus state — per Figma the error variant keeps the input bg, not the focus\n // bg. A resting form-mode field looks like a standard input; a resting inline field\n // is transparent so it blends with surrounding content.\n let fieldBg = \"transparent\";\n let fieldBorder = \"transparent\";\n if (disabled) {\n fieldBg = inputColors.bgDisable;\n fieldBorder = inputColors.borderDisable;\n } else if (isError) {\n fieldBg = inputColors.bg;\n fieldBorder = theme.colors.border.alert;\n } else if (active) {\n fieldBg = theme.colors.control.focus.bg;\n fieldBorder = theme.colors.border.brand;\n } else if (isFormMode) {\n fieldBg = inputColors.bg;\n fieldBorder = inputColors.border;\n }\n\n const textColor = disabled ? inputColors.textDisable : inputColors.text;\n const displayColor = isFilled ? textColor : inputColors.placeholder;\n\n const preventBlur = isWeb\n ? { onMouseDown: (e: React.MouseEvent) => e.preventDefault() }\n : {};\n\n // Edit control uses the high-contrast \"mono primary\" surface (inverts per theme).\n const controlBg = theme.colors.control.mono.primary.bg;\n const controlBgHover = theme.colors.control.mono.primary.bgHover;\n const controlIconColor = theme.colors.control.mono.text.primary;\n\n // In inline display mode the field is an interactive trigger: render it as a real\n // button so it is focusable and activatable with Enter / Space by keyboard users.\n // In form mode the editor is always present, so there is no trigger.\n const isTrigger = !editing && !disabled;\n const triggerProps = isTrigger\n ? {\n as: \"button\" as const,\n type: \"button\" as const,\n id: triggerId,\n onPress: enterEdit,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n }\n : {\n \"aria-disabled\": disabled || undefined,\n };\n\n return (\n <Box\n position=\"relative\"\n width=\"100%\"\n testID={testID}\n className={className}\n >\n {/* Inline anchor — sized to a single text line so the field aligns with surrounding content. */}\n <Box position=\"relative\" width=\"100%\" style={{ minHeight: lineHeight }}>\n {/* Field layer — expands outward (negative inset) so the hover/focus highlight\n does not shift the inline text. */}\n <Box\n {...triggerProps}\n position=\"absolute\"\n flexDirection=\"row\"\n alignItems={\n editing || isError || disabled ? \"flex-start\" : \"center\"\n }\n gap={8}\n paddingVertical={FIELD.framePadding}\n paddingHorizontal={FIELD.framePadding}\n backgroundColor={fieldBg}\n borderColor={fieldBorder}\n borderWidth={1}\n cursor={disabled ? \"not-allowed\" : editing ? \"text\" : \"pointer\"}\n hoverStyle={\n !disabled && !editing && !isError\n ? {\n backgroundColor: inputColors.bgHover,\n borderColor: inputColors.borderHover,\n }\n : undefined\n }\n style={{\n // Pin top/left/right to the anchor (inflated outward); leave the bottom\n // free so the field grows downward with multi-line content.\n top: -FIELD.framePadding,\n left: -FIELD.framePadding,\n right: -FIELD.framePadding,\n minHeight: lineHeight + FIELD.framePadding * 2,\n borderRadius,\n boxSizing: \"border-box\",\n textAlign: \"left\",\n width: \"auto\",\n }}\n >\n {editing && richEnabled ? (\n // Rich-text editor (web): a contenteditable surface holding HTML.\n <Box flex={1} position=\"relative\">\n {!isFilled && (\n <Text\n aria-hidden\n color={inputColors.placeholder}\n fontSize={fontSize}\n fontWeight={String(fontWeight)}\n style={{\n position: \"absolute\",\n top: 0,\n left: 0,\n fontFamily,\n lineHeight: `${lineHeight}px`,\n pointerEvents: \"none\",\n }}\n >\n {placeholder}\n </Text>\n )}\n <div\n ref={editableRef}\n id={inputId}\n contentEditable={!disabled}\n suppressContentEditableWarning\n role=\"textbox\"\n aria-multiline=\"true\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-invalid={isError || undefined}\n aria-describedby={errorMessage ? errorId : undefined}\n data-testid=\"input-edit__field\"\n onInput={handleRichInput}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n onPaste={handlePaste}\n style={{\n outline: \"none\",\n minHeight: `${lineHeight}px`,\n color: textColor,\n fontFamily,\n fontWeight,\n fontSize: `${fontSize}px`,\n lineHeight: `${lineHeight}px`,\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n }}\n />\n </Box>\n ) : editing ? (\n <Box flex={1}>\n <TextAreaPrimitive\n ref={inputRef}\n id={inputId}\n value={plainText}\n placeholder={placeholder}\n onChangeText={handleChangeText}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={handleKeyDown}\n disabled={disabled}\n rows={rows ?? 1}\n color={textColor}\n fontSize={fontSize}\n fontFamily={fontFamily}\n placeholderTextColor={inputColors.placeholder}\n aria-invalid={isError || undefined}\n aria-describedby={errorMessage ? errorId : undefined}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n data-testid=\"input-edit__field\"\n style={{\n display: \"block\",\n overflow: \"hidden\",\n fontWeight,\n lineHeight: `${lineHeight}px`,\n }}\n {...rest}\n />\n </Box>\n ) : richText && isWeb && isFilled ? (\n // Rich display (read-only): render the stored HTML.\n <div\n data-testid=\"input-edit__text\"\n dangerouslySetInnerHTML={{ __html: currentValue }}\n style={{\n flex: 1,\n color: textColor,\n fontFamily,\n fontWeight,\n fontSize: `${fontSize}px`,\n lineHeight: `${lineHeight}px`,\n whiteSpace: \"pre-wrap\",\n wordBreak: \"break-word\",\n }}\n />\n ) : (\n <Text\n color={displayColor}\n fontSize={fontSize}\n fontWeight={String(fontWeight)}\n data-testid=\"input-edit__text\"\n style={{\n flex: 1,\n fontFamily,\n lineHeight: `${lineHeight}px`,\n wordBreak: \"break-word\",\n // Preserve author line breaks in multi-line values.\n whiteSpace: \"pre-wrap\",\n }}\n >\n {isFilled ? plainText : placeholder}\n </Text>\n )}\n\n {/* Edit affordance — shown only in the resting inline display states\n (Default / Hover), matching Figma (hidden while editing and in error /\n disabled states). Decorative: the trigger button already carries the\n accessible name, so hide the icon from assistive tech. */}\n {icon && !editing && !isError && !disabled && (\n <Box alignItems=\"center\" justifyContent=\"center\" aria-hidden>\n <Icon size={FIELD.iconSize} color={textColor}>\n {editIcon ?? <Edit />}\n </Icon>\n </Box>\n )}\n </Box>\n </Box>\n\n {/* Floating confirm / cancel control — shown while the editor is active. */}\n {active && editControl && (\n <Box\n position=\"absolute\"\n flexDirection=\"row\"\n alignItems=\"center\"\n backgroundColor={controlBg}\n data-testid=\"input-edit__edit-control\"\n style={{\n top: controlsTop,\n right: -FIELD.framePadding,\n borderRadius: 4,\n overflow: \"hidden\",\n ...(isWeb\n ? {\n boxShadow: POPOVER_SHADOW,\n backdropFilter: \"blur(12px)\",\n WebkitBackdropFilter: \"blur(12px)\",\n }\n : {}),\n }}\n >\n <Box\n as=\"button\"\n type=\"button\"\n alignItems=\"center\"\n justifyContent=\"center\"\n backgroundColor={controlBg}\n borderWidth={0}\n padding={4}\n cursor=\"pointer\"\n onPress={handleConfirm}\n aria-label=\"Confirm\"\n data-testid=\"input-edit__confirm\"\n hoverStyle={{ backgroundColor: controlBgHover }}\n {...preventBlur}\n >\n <Icon size={CONTROL_ICON_SIZE} color={controlIconColor}>\n <Check />\n </Icon>\n </Box>\n <Box\n backgroundColor={theme.colors.border.inverse}\n style={{ width: 1, alignSelf: \"stretch\" }}\n />\n <Box\n as=\"button\"\n type=\"button\"\n alignItems=\"center\"\n justifyContent=\"center\"\n backgroundColor={controlBg}\n borderWidth={0}\n padding={4}\n cursor=\"pointer\"\n onPress={handleCancel}\n aria-label=\"Cancel\"\n data-testid=\"input-edit__cancel\"\n hoverStyle={{ backgroundColor: controlBgHover }}\n {...preventBlur}\n >\n <Icon size={CONTROL_ICON_SIZE} color={controlIconColor}>\n <Remove />\n </Icon>\n </Box>\n </Box>\n )}\n\n {/* Formatting tools — floating bar below-left, mirroring the confirm / cancel\n control. preventBlur keeps the input focused when a tool is pressed. */}\n {active && tools && (\n <Box\n position=\"absolute\"\n flexDirection=\"row\"\n alignItems=\"center\"\n gap={4}\n padding={4}\n backgroundColor={theme.colors.background.primary}\n data-testid=\"input-edit__tools\"\n style={{\n top: controlsTop,\n left: -FIELD.framePadding,\n borderRadius: 4,\n ...(isWeb\n ? {\n boxShadow: POPOVER_SHADOW,\n backdropFilter: \"blur(12px)\",\n WebkitBackdropFilter: \"blur(12px)\",\n }\n : {}),\n }}\n {...preventBlur}\n >\n {tools}\n </Box>\n )}\n\n {/* Error message — a frosted popover callout with a pointer aimed at the field,\n matching the Figma tooltip treatment. */}\n {isError && errorMessage && (\n <Box\n position=\"relative\"\n style={{\n marginTop: FIELD.framePadding + 4,\n width: \"max-content\",\n maxWidth: \"100%\",\n ...(isWeb\n ? {\n filter: POPOVER_DROP_SHADOW,\n WebkitFilter: POPOVER_DROP_SHADOW,\n }\n : {}),\n }}\n >\n {/* Pointer (rotated square) at the top-left, tucked behind the bubble. */}\n <Box\n position=\"absolute\"\n backgroundColor={theme.colors.background.primary}\n style={{\n width: 8,\n height: 8,\n top: -3,\n left: 16,\n transform: \"rotate(45deg)\",\n }}\n />\n <Box\n backgroundColor={theme.colors.background.primary}\n paddingVertical={8}\n paddingHorizontal={12}\n style={{\n borderRadius: 4,\n ...(isWeb\n ? {\n backdropFilter: \"blur(12px)\",\n WebkitBackdropFilter: \"blur(12px)\",\n }\n : {}),\n }}\n >\n <Text\n id={errorId}\n role=\"status\"\n aria-live=\"polite\"\n color={theme.colors.content.alert.primary}\n fontSize={FIELD.fontSize - 2}\n style={{ lineHeight: `${FIELD.lineHeight}px` }}\n >\n {errorMessage}\n </Text>\n </Box>\n </Box>\n )}\n </Box>\n );\n }\n);\n\nInputEdit.displayName = \"InputEdit\";\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport type { BoxProps } from \"@xsolla/xui-primitives-core\";\nimport { createFilteredElement } from \"./filterDOMProps\";\n\nconst FilteredDiv = createFilteredElement(\"div\");\n\nconst StyledBox = styled(FilteredDiv)<BoxProps>`\n display: flex;\n box-sizing: border-box;\n background-color: ${(props) => props.backgroundColor || \"transparent\"};\n border-color: ${(props) => props.borderColor || \"transparent\"};\n border-width: ${(props) =>\n typeof props.borderWidth === \"number\"\n ? `${props.borderWidth}px`\n : props.borderWidth || 0};\n\n ${(props) =>\n props.borderBottomWidth !== undefined &&\n `\n border-bottom-width: ${typeof props.borderBottomWidth === \"number\" ? `${props.borderBottomWidth}px` : props.borderBottomWidth};\n border-bottom-color: ${props.borderBottomColor || props.borderColor || \"transparent\"};\n border-bottom-style: solid;\n `}\n ${(props) =>\n props.borderTopWidth !== undefined &&\n `\n border-top-width: ${typeof props.borderTopWidth === \"number\" ? `${props.borderTopWidth}px` : props.borderTopWidth};\n border-top-color: ${props.borderTopColor || props.borderColor || \"transparent\"};\n border-top-style: solid;\n `}\n ${(props) =>\n props.borderLeftWidth !== undefined &&\n `\n border-left-width: ${typeof props.borderLeftWidth === \"number\" ? `${props.borderLeftWidth}px` : props.borderLeftWidth};\n border-left-color: ${props.borderLeftColor || props.borderColor || \"transparent\"};\n border-left-style: solid;\n `}\n ${(props) =>\n props.borderRightWidth !== undefined &&\n `\n border-right-width: ${typeof props.borderRightWidth === \"number\" ? `${props.borderRightWidth}px` : props.borderRightWidth};\n border-right-color: ${props.borderRightColor || props.borderColor || \"transparent\"};\n border-right-style: solid;\n `}\n\n border-style: ${(props) =>\n props.borderStyle ||\n (props.borderWidth ||\n props.borderBottomWidth ||\n props.borderTopWidth ||\n props.borderLeftWidth ||\n props.borderRightWidth\n ? \"solid\"\n : \"none\")};\n border-radius: ${(props) =>\n typeof props.borderRadius === \"number\"\n ? `${props.borderRadius}px`\n : props.borderRadius || 0};\n height: ${(props) =>\n typeof props.height === \"number\"\n ? `${props.height}px`\n : props.height || \"auto\"};\n width: ${(props) =>\n typeof props.width === \"number\"\n ? `${props.width}px`\n : props.width || \"auto\"};\n min-width: ${(props) =>\n typeof props.minWidth === \"number\"\n ? `${props.minWidth}px`\n : props.minWidth || \"auto\"};\n min-height: ${(props) =>\n typeof props.minHeight === \"number\"\n ? `${props.minHeight}px`\n : props.minHeight || \"auto\"};\n max-width: ${(props) =>\n typeof props.maxWidth === \"number\"\n ? `${props.maxWidth}px`\n : props.maxWidth || \"none\"};\n max-height: ${(props) =>\n typeof props.maxHeight === \"number\"\n ? `${props.maxHeight}px`\n : props.maxHeight || \"none\"};\n\n padding: ${(props) =>\n typeof props.padding === \"number\"\n ? `${props.padding}px`\n : props.padding || 0};\n ${(props) =>\n props.paddingHorizontal &&\n `\n padding-left: ${typeof props.paddingHorizontal === \"number\" ? `${props.paddingHorizontal}px` : props.paddingHorizontal};\n padding-right: ${typeof props.paddingHorizontal === \"number\" ? `${props.paddingHorizontal}px` : props.paddingHorizontal};\n `}\n ${(props) =>\n props.paddingVertical &&\n `\n padding-top: ${typeof props.paddingVertical === \"number\" ? `${props.paddingVertical}px` : props.paddingVertical};\n padding-bottom: ${typeof props.paddingVertical === \"number\" ? `${props.paddingVertical}px` : props.paddingVertical};\n `}\n ${(props) =>\n props.paddingTop !== undefined &&\n `padding-top: ${typeof props.paddingTop === \"number\" ? `${props.paddingTop}px` : props.paddingTop};`}\n ${(props) =>\n props.paddingBottom !== undefined &&\n `padding-bottom: ${typeof props.paddingBottom === \"number\" ? `${props.paddingBottom}px` : props.paddingBottom};`}\n ${(props) =>\n props.paddingLeft !== undefined &&\n `padding-left: ${typeof props.paddingLeft === \"number\" ? `${props.paddingLeft}px` : props.paddingLeft};`}\n ${(props) =>\n props.paddingRight !== undefined &&\n `padding-right: ${typeof props.paddingRight === \"number\" ? `${props.paddingRight}px` : props.paddingRight};`}\n\n margin: ${(props) =>\n typeof props.margin === \"number\" ? `${props.margin}px` : props.margin || 0};\n ${(props) =>\n props.marginTop !== undefined &&\n `margin-top: ${typeof props.marginTop === \"number\" ? `${props.marginTop}px` : props.marginTop};`}\n ${(props) =>\n props.marginBottom !== undefined &&\n `margin-bottom: ${typeof props.marginBottom === \"number\" ? `${props.marginBottom}px` : props.marginBottom};`}\n ${(props) =>\n props.marginLeft !== undefined &&\n `margin-left: ${typeof props.marginLeft === \"number\" ? `${props.marginLeft}px` : props.marginLeft};`}\n ${(props) =>\n props.marginRight !== undefined &&\n `margin-right: ${typeof props.marginRight === \"number\" ? `${props.marginRight}px` : props.marginRight};`}\n\n flex-direction: ${(props) => props.flexDirection || \"column\"};\n flex-wrap: ${(props) => props.flexWrap || \"nowrap\"};\n align-items: ${(props) => props.alignItems || \"stretch\"};\n justify-content: ${(props) => props.justifyContent || \"flex-start\"};\n cursor: ${(props) =>\n props.cursor\n ? props.cursor\n : props.onClick || props.onPress\n ? \"pointer\"\n : \"inherit\"};\n position: ${(props) => props.position || \"static\"};\n top: ${(props) =>\n typeof props.top === \"number\" ? `${props.top}px` : props.top};\n bottom: ${(props) =>\n typeof props.bottom === \"number\" ? `${props.bottom}px` : props.bottom};\n left: ${(props) =>\n typeof props.left === \"number\" ? `${props.left}px` : props.left};\n right: ${(props) =>\n typeof props.right === \"number\" ? `${props.right}px` : props.right};\n flex: ${(props) => props.flex};\n flex-shrink: ${(props) => props.flexShrink ?? 1};\n gap: ${(props) =>\n typeof props.gap === \"number\" ? `${props.gap}px` : props.gap || 0};\n align-self: ${(props) => props.alignSelf || \"auto\"};\n overflow: ${(props) => props.overflow || \"visible\"};\n overflow-x: ${(props) => props.overflowX || \"visible\"};\n overflow-y: ${(props) => props.overflowY || \"visible\"};\n z-index: ${(props) => props.zIndex};\n opacity: ${(props) => (props.disabled ? 0.5 : 1)};\n pointer-events: ${(props) => (props.disabled ? \"none\" : \"auto\")};\n\n &:hover {\n ${(props) =>\n props.hoverStyle?.backgroundColor &&\n `background-color: ${props.hoverStyle.backgroundColor};`}\n ${(props) =>\n props.hoverStyle?.borderColor &&\n `border-color: ${props.hoverStyle.borderColor};`}\n }\n\n &:active {\n ${(props) =>\n props.pressStyle?.backgroundColor &&\n `background-color: ${props.pressStyle.backgroundColor};`}\n }\n`;\n\nexport const Box = React.forwardRef<\n HTMLDivElement | HTMLButtonElement,\n BoxProps\n>(\n (\n {\n children,\n onPress,\n onKeyDown,\n onKeyUp,\n role,\n \"aria-label\": ariaLabel,\n \"aria-labelledby\": ariaLabelledBy,\n \"aria-current\": ariaCurrent,\n \"aria-disabled\": ariaDisabled,\n \"aria-live\": ariaLive,\n \"aria-busy\": ariaBusy,\n \"aria-describedby\": ariaDescribedBy,\n \"aria-expanded\": ariaExpanded,\n \"aria-haspopup\": ariaHasPopup,\n \"aria-pressed\": ariaPressed,\n \"aria-controls\": ariaControls,\n tabIndex,\n as,\n src,\n alt,\n onError,\n onLoad,\n type,\n disabled,\n id,\n testID,\n \"data-testid\": dataTestId,\n ...props\n },\n ref\n ) => {\n // Handle as=\"img\" for rendering images with proper border-radius\n if (as === \"img\" && src) {\n return (\n <img\n src={src}\n alt={alt || \"\"}\n onError={onError}\n onLoad={onLoad}\n style={{\n display: \"block\",\n objectFit: \"cover\",\n width:\n typeof props.width === \"number\"\n ? `${props.width}px`\n : props.width,\n height:\n typeof props.height === \"number\"\n ? `${props.height}px`\n : props.height,\n borderRadius:\n typeof props.borderRadius === \"number\"\n ? `${props.borderRadius}px`\n : props.borderRadius,\n position: props.position,\n top: typeof props.top === \"number\" ? `${props.top}px` : props.top,\n left:\n typeof props.left === \"number\" ? `${props.left}px` : props.left,\n right:\n typeof props.right === \"number\"\n ? `${props.right}px`\n : props.right,\n bottom:\n typeof props.bottom === \"number\"\n ? `${props.bottom}px`\n : props.bottom,\n ...props.style,\n }}\n />\n );\n }\n\n return (\n <StyledBox\n ref={ref}\n elementType={as}\n id={id}\n type={as === \"button\" ? type || \"button\" : undefined}\n disabled={as === \"button\" ? disabled : undefined}\n onClick={onPress}\n onKeyDown={onKeyDown}\n onKeyUp={onKeyUp}\n role={role}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-current={ariaCurrent}\n aria-disabled={ariaDisabled}\n aria-busy={ariaBusy}\n aria-describedby={ariaDescribedBy}\n aria-expanded={ariaExpanded}\n aria-haspopup={ariaHasPopup}\n aria-pressed={ariaPressed}\n aria-controls={ariaControls}\n aria-live={ariaLive}\n tabIndex={tabIndex !== undefined ? tabIndex : undefined}\n data-testid={dataTestId || testID}\n {...props}\n >\n {children}\n </StyledBox>\n );\n }\n);\n\nBox.displayName = \"Box\";\n","import React from \"react\";\nimport isPropValid from \"@emotion/is-prop-valid\";\n\n// Props that @emotion/is-prop-valid incorrectly treats as valid HTML.\n// These are React Native or component-specific props that match\n// valid HTML patterns (on* event handlers, SVG attributes).\nexport const ADDITIONAL_BLOCKED_PROPS = new Set([\n // RN-only event handlers (pass isPropValid's on* pattern)\n \"onPress\",\n \"onChangeText\",\n \"onLayout\",\n \"onMoveShouldSetResponder\",\n \"onResponderGrant\",\n \"onResponderMove\",\n \"onResponderRelease\",\n \"onResponderTerminate\",\n // SVG attributes that pass isPropValid\n \"strokeWidth\",\n // CSS properties that pass isPropValid but are used as component props\n \"overflow\",\n \"cursor\",\n \"fontSize\",\n \"fontWeight\",\n \"fontFamily\",\n \"textDecoration\",\n]);\n\nfunction shouldForwardProp(key: string): boolean {\n if (ADDITIONAL_BLOCKED_PROPS.has(key)) return false;\n return isPropValid(key);\n}\n\n/**\n * Creates a React component that renders the given HTML tag\n * but filters out non-HTML props before they reach the DOM.\n *\n * Uses @emotion/is-prop-valid (same library styled-components v4\n * uses internally) to automatically block invalid HTML attributes,\n * plus a small blocklist for false positives (RN on* handlers, SVG attrs).\n *\n * Usage: `const FilteredDiv = createFilteredElement(\"div\");`\n * Then: `const StyledBox = styled(FilteredDiv)<BoxProps>\\`...\\`;`\n *\n * styled-components can still read ALL props for CSS interpolation,\n * but only valid HTML attributes are forwarded to the DOM element.\n */\nexport function createFilteredElement(defaultTag: string) {\n const Component = React.forwardRef<HTMLElement, Record<string, unknown>>(\n ({ children, elementType, ...props }, ref) => {\n const Tag = (elementType as string) || defaultTag;\n const htmlProps: Record<string, unknown> = {};\n for (const key of Object.keys(props)) {\n if (shouldForwardProp(key)) {\n htmlProps[key] = props[key];\n }\n }\n return React.createElement(\n Tag,\n { ref, ...htmlProps },\n children as React.ReactNode\n );\n }\n );\n Component.displayName = `Filtered(${defaultTag})`;\n return Component;\n}\n","function memoize(fn) {\n var cache = {};\n return function (arg) {\n if (cache[arg] === undefined) cache[arg] = fn(arg);\n return cache[arg];\n };\n}\n\nexport default memoize;\n","import memoize from '@emotion/memoize';\n\nvar reactPropsRegex = /^((children|dangerouslySetInnerHTML|key|ref|autoFocus|defaultValue|defaultChecked|innerHTML|suppressContentEditableWarning|suppressHydrationWarning|valueLink|accept|acceptCharset|accessKey|action|allow|allowUserMedia|allowPaymentRequest|allowFullScreen|allowTransparency|alt|async|autoComplete|autoPlay|capture|cellPadding|cellSpacing|challenge|charSet|checked|cite|classID|className|cols|colSpan|content|contentEditable|contextMenu|controls|controlsList|coords|crossOrigin|data|dateTime|decoding|default|defer|dir|disabled|disablePictureInPicture|download|draggable|encType|form|formAction|formEncType|formMethod|formNoValidate|formTarget|frameBorder|headers|height|hidden|high|href|hrefLang|htmlFor|httpEquiv|id|inputMode|integrity|is|keyParams|keyType|kind|label|lang|list|loading|loop|low|marginHeight|marginWidth|max|maxLength|media|mediaGroup|method|min|minLength|multiple|muted|name|nonce|noValidate|open|optimum|pattern|placeholder|playsInline|poster|preload|profile|radioGroup|readOnly|referrerPolicy|rel|required|reversed|role|rows|rowSpan|sandbox|scope|scoped|scrolling|seamless|selected|shape|size|sizes|slot|span|spellCheck|src|srcDoc|srcLang|srcSet|start|step|style|summary|tabIndex|target|title|type|useMap|value|width|wmode|wrap|about|datatype|inlist|prefix|property|resource|typeof|vocab|autoCapitalize|autoCorrect|autoSave|color|inert|itemProp|itemScope|itemType|itemID|itemRef|on|results|security|unselectable|accentHeight|accumulate|additive|alignmentBaseline|allowReorder|alphabetic|amplitude|arabicForm|ascent|attributeName|attributeType|autoReverse|azimuth|baseFrequency|baselineShift|baseProfile|bbox|begin|bias|by|calcMode|capHeight|clip|clipPathUnits|clipPath|clipRule|colorInterpolation|colorInterpolationFilters|colorProfile|colorRendering|contentScriptType|contentStyleType|cursor|cx|cy|d|decelerate|descent|diffuseConstant|direction|display|divisor|dominantBaseline|dur|dx|dy|edgeMode|elevation|enableBackground|end|exponent|externalResourcesRequired|fill|fillOpacity|fillRule|filter|filterRes|filterUnits|floodColor|floodOpacity|focusable|fontFamily|fontSize|fontSizeAdjust|fontStretch|fontStyle|fontVariant|fontWeight|format|from|fr|fx|fy|g1|g2|glyphName|glyphOrientationHorizontal|glyphOrientationVertical|glyphRef|gradientTransform|gradientUnits|hanging|horizAdvX|horizOriginX|ideographic|imageRendering|in|in2|intercept|k|k1|k2|k3|k4|kernelMatrix|kernelUnitLength|kerning|keyPoints|keySplines|keyTimes|lengthAdjust|letterSpacing|lightingColor|limitingConeAngle|local|markerEnd|markerMid|markerStart|markerHeight|markerUnits|markerWidth|mask|maskContentUnits|maskUnits|mathematical|mode|numOctaves|offset|opacity|operator|order|orient|orientation|origin|overflow|overlinePosition|overlineThickness|panose1|paintOrder|pathLength|patternContentUnits|patternTransform|patternUnits|pointerEvents|points|pointsAtX|pointsAtY|pointsAtZ|preserveAlpha|preserveAspectRatio|primitiveUnits|r|radius|refX|refY|renderingIntent|repeatCount|repeatDur|requiredExtensions|requiredFeatures|restart|result|rotate|rx|ry|scale|seed|shapeRendering|slope|spacing|specularConstant|specularExponent|speed|spreadMethod|startOffset|stdDeviation|stemh|stemv|stitchTiles|stopColor|stopOpacity|strikethroughPosition|strikethroughThickness|string|stroke|strokeDasharray|strokeDashoffset|strokeLinecap|strokeLinejoin|strokeMiterlimit|strokeOpacity|strokeWidth|surfaceScale|systemLanguage|tableValues|targetX|targetY|textAnchor|textDecoration|textRendering|textLength|to|transform|u1|u2|underlinePosition|underlineThickness|unicode|unicodeBidi|unicodeRange|unitsPerEm|vAlphabetic|vHanging|vIdeographic|vMathematical|values|vectorEffect|version|vertAdvY|vertOriginX|vertOriginY|viewBox|viewTarget|visibility|widths|wordSpacing|writingMode|x|xHeight|x1|x2|xChannelSelector|xlinkActuate|xlinkArcrole|xlinkHref|xlinkRole|xlinkShow|xlinkTitle|xlinkType|xmlBase|xmlns|xmlnsXlink|xmlLang|xmlSpace|y|y1|y2|yChannelSelector|z|zoomAndPan|for|class|autofocus)|(([Dd][Aa][Tt][Aa]|[Aa][Rr][Ii][Aa]|x)-.*))$/; // https://esbench.com/bench/5bfee68a4cd7e6009ef61d23\n\nvar index = memoize(function (prop) {\n return reactPropsRegex.test(prop) || prop.charCodeAt(0) === 111\n /* o */\n && prop.charCodeAt(1) === 110\n /* n */\n && prop.charCodeAt(2) < 91;\n}\n/* Z+1 */\n);\n\nexport default index;\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { TextProps } from \"@xsolla/xui-primitives-core\";\nimport { createFilteredElement } from \"./filterDOMProps\";\n\nconst FilteredSpan = createFilteredElement(\"span\");\n\nconst StyledText = styled(FilteredSpan)<TextProps>`\n color: ${(props) => props.color || \"inherit\"};\n font-size: ${(props) =>\n typeof props.fontSize === \"number\"\n ? `${props.fontSize}px`\n : props.fontSize || \"inherit\"};\n font-weight: ${(props) => props.fontWeight || \"normal\"};\n font-family: ${(props) =>\n props.fontFamily ||\n '\"Aktiv Grotesk\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif'};\n line-height: ${(props) =>\n typeof props.lineHeight === \"number\"\n ? `${props.lineHeight}px`\n : props.lineHeight || \"inherit\"};\n white-space: ${(props) => props.whiteSpace || \"normal\"};\n text-align: ${(props) => props.textAlign || \"inherit\"};\n text-decoration: ${(props) => props.textDecoration || \"none\"};\n`;\n\nexport const Text: React.FC<TextProps> = ({\n style,\n className,\n id,\n role,\n testID,\n \"data-testid\": dataTestId,\n numberOfLines: _numberOfLines,\n ...props\n}) => {\n return (\n <StyledText\n {...props}\n style={style}\n className={className}\n id={id}\n role={role}\n data-testid={dataTestId || testID}\n />\n );\n};\n","import React from \"react\";\nimport styled from \"styled-components\";\nimport { IconProps } from \"@xsolla/xui-primitives-core\";\nimport { createFilteredElement } from \"./filterDOMProps\";\n\nconst FilteredDiv = createFilteredElement(\"div\");\n\nconst StyledIcon = styled(FilteredDiv)<IconProps>`\n display: flex;\n align-items: center;\n justify-content: center;\n width: ${(props) =>\n typeof props.size === \"number\" ? `${props.size}px` : props.size || \"24px\"};\n height: ${(props) =>\n typeof props.size === \"number\" ? `${props.size}px` : props.size || \"24px\"};\n color: ${(props) => props.color || \"currentColor\"};\n\n svg {\n width: 100%;\n height: 100%;\n fill: none;\n stroke: currentColor;\n }\n`;\n\nexport const Icon: React.FC<IconProps> = ({\n children,\n testID,\n \"data-testid\": dataTestId,\n ...props\n}) => {\n return (\n <StyledIcon data-testid={dataTestId || testID} {...props}>\n {children}\n </StyledIcon>\n );\n};\n","import { forwardRef } from \"react\";\nimport styled from \"styled-components\";\nimport { TextAreaPrimitiveProps } from \"@xsolla/xui-primitives-core\";\nimport { createFilteredElement } from \"./filterDOMProps\";\n\nconst FilteredTextArea = createFilteredElement(\"textarea\");\n\nconst StyledTextArea = styled(FilteredTextArea)<TextAreaPrimitiveProps>`\n background: transparent;\n border: none;\n outline: none;\n width: 100%;\n height: 100%;\n padding: 0;\n margin: 0;\n color: ${(props) => props.color || \"inherit\"};\n font-size: ${(props) =>\n typeof props.fontSize === \"number\"\n ? `${props.fontSize}px`\n : props.fontSize || \"inherit\"};\n font-family: ${(props) =>\n props.fontFamily ||\n '\"Aktiv Grotesk\", -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Helvetica, Arial, sans-serif'};\n text-align: inherit;\n resize: none;\n\n &::placeholder {\n color: ${(props) =>\n props.placeholderTextColor || \"rgba(255, 255, 255, 0.5)\"};\n }\n\n &:disabled {\n cursor: not-allowed;\n }\n`;\n\nexport const TextAreaPrimitive = forwardRef<\n HTMLTextAreaElement,\n TextAreaPrimitiveProps\n>(\n (\n {\n value,\n placeholder,\n onChangeText,\n onFocus,\n onBlur,\n onKeyDown,\n disabled,\n style,\n color,\n fontSize,\n fontFamily,\n placeholderTextColor,\n maxLength,\n rows,\n testID,\n \"data-testid\": dataTestId,\n },\n ref\n ) => {\n return (\n <StyledTextArea\n ref={ref}\n value={value}\n placeholder={placeholder}\n onChange={(e: React.ChangeEvent<HTMLTextAreaElement>) =>\n onChangeText?.(e.target.value)\n }\n onFocus={onFocus}\n onBlur={onBlur}\n onKeyDown={onKeyDown}\n disabled={disabled}\n style={style}\n color={color}\n fontSize={fontSize}\n fontFamily={fontFamily}\n placeholderTextColor={placeholderTextColor}\n maxLength={maxLength}\n rows={rows}\n data-testid={dataTestId || testID}\n />\n );\n }\n);\n\nTextAreaPrimitive.displayName = \"TextAreaPrimitive\";\n","export * from \"./Box\";\nexport * from \"./Text\";\nexport * from \"./Spinner\";\nexport * from \"./Icon\";\nexport * from \"./Divider\";\nexport * from \"./Input\";\nexport * from \"./TextArea\";\nexport * from \"./LinearGradient\";\n\nexport const isWeb = true;\nexport const isNative = false;\n"],"mappings":"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","names":["import_react","import_react","React","styled","React","import_styled_components","import_jsx_runtime","styled","import_styled_components","import_jsx_runtime","FilteredDiv","styled","import_react","import_styled_components","import_jsx_runtime","styled","import_jsx_runtime","React","el"]}