{"version":3,"file":"index94.cjs","sources":["../src/atoms/textfield/index.tsx"],"sourcesContent":["import {\n  ReactNode,\n  useEffect,\n  useState,\n  forwardRef,\n  useRef,\n  RefObject,\n} from \"react\";\nimport stylesLabelled from \"./TextFieldAtomLabelled.module.css\";\nimport stylesLabelless from \"./TextFieldAtomLabelless.module.css\";\n\nimport { motion, AnimatePresence } from \"framer-motion\";\n\nimport {\n  LabelPairedCircleCaptionBoldIcon,\n  LabelPairedCircleCheckCaptionBoldIcon,\n  LabelPairedCircleCheckSmBoldIcon,\n  LabelPairedCircleXmarkCaptionBoldIcon,\n  LabelPairedTriangleExclamationSmBoldIcon,\n} from \"@deriv/quill-icons\";\nimport { hasInputValue } from \"../../helpers\";\n\nconst textFieldStyles = {\n  labelled: stylesLabelled,\n  labelless: stylesLabelless,\n};\n\nexport type TextFieldMessagesType = {\n  text: string;\n  type: \"neutral\" | \"fail\" | \"success\";\n  icon?: ReactNode;\n};\n\nexport type TextFieldAtomType = {\n  id?: string;\n  name?: string;\n  className?: string;\n  label?: string;\n  showCharacterCounter?: boolean;\n  message?: string;\n  placeholder?: string;\n\n  /** Variant props */\n  indicator?: \"neutral\" | \"fail\" | \"success\";\n  state?: \"default\" | \"disabled\";\n  type?: \"outline\" | \"fill\";\n  textAlignment?: \"left\" | \"center\";\n\n  /** Custom props */\n  isGroup?: boolean;\n  isLeftGroup?: boolean;\n  variant?: \"labelled\" | \"labelless\";\n  iconLeft?: ReactNode;\n  iconLeftSecondary?: ReactNode;\n  iconRight?: ReactNode;\n  iconStatus?: ReactNode;\n  iconExtra?: ReactNode;\n  labelLeft?: string;\n  labelLeftValue?: string;\n  labelRight?: string;\n  contentRight?: ReactNode;\n  isRequired?: boolean;\n  optionalText?: string;\n  maxLength?: number;\n  inputType?: \"text\" | \"password\" | \"number\" | \"email\" | \"tel\" | \"url\";\n  inputElement?: \"input\" | \"textarea\";\n  size?: \"lg\" | \"md\" | \"sm\";\n  showStatusIcon?: boolean;\n  value?: string | number;\n  allowTyping?: boolean;\n  messages?: TextFieldMessagesType[];\n  containerRef?: React.RefObject<HTMLDivElement>;\n  customContent?: ReactNode;\n  customInnerContent?: ReactNode;\n  onChange?: (value: string | number) => void;\n  onClick?: (e: React.MouseEvent<HTMLDivElement>) => void;\n  onAddonLeftClick?: (e: React.MouseEvent<HTMLDivElement>) => void;\n  onFocus?: () => void;\n  onBlur?: () => void;\n  onBeforeChange?: (value: string | number) => boolean;\n};\n\nconst TextFieldAtom = forwardRef<HTMLInputElement, TextFieldAtomType>(\n  (\n    {\n      id,\n      name,\n      className = \"\",\n      indicator = \"neutral\",\n      state = \"default\",\n      type = \"outline\",\n      inputType = \"text\",\n      inputElement = \"input\",\n      showCharacterCounter = false,\n      isGroup = false,\n      isLeftGroup = false,\n      label = \"\",\n      iconLeft,\n      iconLeftSecondary,\n      iconRight,\n      iconStatus,\n      iconExtra,\n      labelLeft = \"\",\n      labelLeftValue = \"\",\n      labelRight = \"\",\n      isRequired = false,\n      optionalText = \"\",\n      maxLength = 32,\n      message = \"\",\n      messages = [],\n      placeholder = \"Placeholder\",\n      variant = \"labelled\",\n      textAlignment = \"left\",\n      size = \"md\",\n      showStatusIcon = true,\n      value: inputValue,\n      allowTyping = true,\n      containerRef,\n      customContent,\n      customInnerContent,\n      contentRight,\n      onChange,\n      onClick,\n      onAddonLeftClick,\n      onFocus,\n      onBlur,\n      onBeforeChange,\n    },\n    ref\n  ) => {\n    const styles = textFieldStyles[variant];\n\n    const MESSAGE_STATUS_STYLES = {\n      neutral: styles.checklist1,\n      success: styles.checklist2,\n      fail: styles.checklist3,\n    } as const;\n\n    const STATUS_ICONS = {\n      success: <LabelPairedCircleCheckSmBoldIcon />,\n      fail: <LabelPairedTriangleExclamationSmBoldIcon />,\n      neutral: null,\n    } as const;\n\n    const MESSAGE_ICONS = {\n      success: <LabelPairedCircleCheckCaptionBoldIcon />,\n      fail: <LabelPairedCircleXmarkCaptionBoldIcon />,\n      neutral: <LabelPairedCircleCaptionBoldIcon />,\n    } as const;\n\n    const textFieldId = `quill-atom-textfield-${variant}-${indicator}-${state}-${type}-${size}-${textAlignment}-${\n      isGroup ? \"group\" : \"\"\n    }`;\n\n    const [isFocused, setIsFocused] = useState(hasInputValue(inputValue));\n    const [value, setValue] = useState<string | number>(inputValue || \"\");\n\n    const statusIcon = iconStatus ? iconStatus : STATUS_ICONS[indicator];\n\n    // Create internal ref if external ref is not provided\n    const internalRef =\n      inputElement === \"input\"\n        ? useRef<HTMLInputElement>(null)\n        : useRef<HTMLTextAreaElement>(null);\n    const inputRef = ref || internalRef;\n\n    useEffect(() => {\n      if (isFocused) {\n        if (typeof inputRef === \"object\" && inputRef?.current) {\n          inputRef.current.focus();\n        }\n      }\n    }, [isFocused, inputRef]);\n\n    const handleFocus = (e: React.FocusEvent<HTMLInputElement>) => {\n      if (state === \"disabled\") return;\n\n      setIsFocused(true);\n      onFocus?.();\n    };\n\n    const handleChange = (\n      e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>\n    ) => {\n      if (!allowTyping) return;\n\n      const newValue = e.target.value;\n      if (newValue.length <= maxLength) {\n        setValue(newValue);\n        onChange?.(newValue);\n      }\n    };\n    const handleBlur = () => {\n      if (!hasInputValue(value)) {\n        setIsFocused(false);\n        onBlur?.();\n      }\n    };\n\n    const handleKeyInput = (\n      e: React.KeyboardEvent<HTMLInputElement | HTMLTextAreaElement>\n    ) => {\n      // @ts-expect-error: isAction is injected by Storybook for action handlers\n      if (typeof onBeforeChange === \"function\" && !onBeforeChange?.isAction) {\n        if (!onBeforeChange(e.key)) {\n          e.preventDefault();\n        }\n      }\n    };\n\n    const inputProps = {\n      id: id || textFieldId,\n      name: name,\n      className: `${styles.input} quill-ui-next-input ${\n        !allowTyping && \"quill-ui-next-no-typing\"\n      }`,\n      value,\n      onChange: handleChange,\n      placeholder,\n      type: inputType,\n      onFocus: () => setIsFocused(true),\n      onBlur: handleBlur,\n      disabled: state === \"disabled\",\n      readOnly: !allowTyping,\n      onKeyDown: handleKeyInput,\n      onKeyUp: handleKeyInput,\n      onKeyPress: handleKeyInput,\n    };\n\n    useEffect(() => {\n      if (inputValue !== undefined) {\n        setValue(inputValue);\n      }\n    }, [inputValue]);\n\n    const isLabelActive = isFocused || hasInputValue(value);\n\n    const renderInputContents = () => {\n      const contents = (\n        <>\n          {variant === \"labelled\" ? (\n            <div\n              className={`${styles.labelmarkerinput} textfield-label-marker`}\n              style={{ overflow: isLabelActive ? \"visible\" : \"hidden\" }} // Necessary to prevent animation flickering\n            >\n              <div className={styles.labelMarker}>\n                <div\n                  className={`${styles.label} quill-ui-next-input-label-transition`}\n                >\n                  {label}\n                </div>\n                {(isRequired || optionalText) && (\n                  <>\n                    {isRequired && (\n                      <div className={styles.fieldMarkerRequired}>\n                        <div\n                          className={`${styles.label1} quill-ui-next-input-label-transition`}\n                        >\n                          *\n                        </div>\n                      </div>\n                    )}\n\n                    {optionalText && !isRequired && (\n                      <div className={styles.fieldMarkerOptional}>\n                        <div\n                          className={`${styles.label2} quill-ui-next-input-label-transition`}\n                        >\n                          {optionalText}\n                        </div>\n                      </div>\n                    )}\n                  </>\n                )}\n              </div>\n\n              <AnimatePresence initial={false}>\n                {inputElement === \"input\" ? (\n                  <motion.input\n                    {...inputProps}\n                    ref={inputRef as RefObject<HTMLInputElement>}\n                    initial={false}\n                    animate={{\n                      y: isLabelActive ? 0 : \"100%\",\n                      opacity: isLabelActive ? 1 : 0,\n                      scale: isLabelActive ? 1 : 0.95,\n                    }}\n                    transition={{\n                      duration: 0.2,\n                      ease: \"easeOut\",\n                    }}\n                    style={{\n                      originY: 0,\n                      position: \"relative\",\n                      display: \"block\",\n                      width: \"100%\",\n                      pointerEvents: isLabelActive ? \"auto\" : \"none\",\n                      marginTop: isLabelActive ? \"\" : \"-25px\",\n                      transition: \"margin-top 0.2s ease-out\",\n                      marginLeft: \"-2px\",\n                    }}\n                  />\n                ) : (\n                  <motion.textarea\n                    {...inputProps}\n                    ref={inputRef as RefObject<HTMLTextAreaElement>}\n                    initial={false}\n                    animate={{\n                      y: isLabelActive ? 0 : \"100%\",\n                      opacity: isLabelActive ? 1 : 0,\n                      scale: isLabelActive ? 1 : 0.95,\n                    }}\n                    transition={{\n                      duration: 0.2,\n                      ease: \"easeOut\",\n                    }}\n                    style={{\n                      originY: 0,\n                      position: \"relative\",\n                      display: \"block\",\n                      width: \"100%\",\n                      pointerEvents: isLabelActive ? \"auto\" : \"none\",\n                      transition: \"margin-top 0.2s ease-out\",\n                      marginLeft: \"-2px\",\n                    }}\n                  />\n                )}\n              </AnimatePresence>\n            </div>\n          ) : inputElement === \"input\" ? (\n            <input\n              ref={inputRef as RefObject<HTMLInputElement>}\n              {...inputProps}\n            />\n          ) : (\n            <textarea\n              ref={inputRef as RefObject<HTMLTextAreaElement>}\n              {...inputProps}\n            />\n          )}\n\n          {!isGroup && <div className={styles.labelRight}>{labelRight}</div>}\n\n          {iconExtra && (\n            <div className={[styles.iconLeft, \"textfield-icon\"].join(\" \")}>\n              {iconExtra}\n            </div>\n          )}\n\n          {showStatusIcon && statusIcon && !iconExtra && (\n            <div\n              className={[styles.iconLeft, \"textfield-status-icon\"].join(\" \")}\n            >\n              {statusIcon}\n            </div>\n          )}\n\n          {iconRight && (\n            <div className={[styles.iconLeft, \"textfield-icon\"].join(\" \")}>\n              {iconRight}\n            </div>\n          )}\n\n          {contentRight && contentRight}\n        </>\n      );\n\n      if (isGroup) {\n        return <div className={styles.labelinputicon}>{contents}</div>;\n      }\n\n      return contents;\n    };\n\n    return (\n      <div\n        className={[\n          styles.root,\n          className,\n          \"quill-ui-next-atom\",\n          \"quill-ui-next-atom-textfield\",\n          \"quill-ui-next-no-select\",\n        ].join(\" \")}\n        data-indicator={indicator}\n        data-is-typed={isFocused}\n        data-state={state}\n        data-type={type}\n        data-id={textFieldId}\n        data-variant={variant}\n        data-text-alignment={textAlignment}\n        data-size={size}\n        data-group={isGroup ? \"true\" : \"false\"}\n        data-input-element={inputElement}\n        onClick={onClick}\n      >\n        <div\n          ref={containerRef}\n          className={[\n            styles.field,\n            \"quill-ui-next-no-focus\",\n            \"quill-ui-next-textfield-field\",\n          ].join(\" \")}\n          onFocus={handleFocus}\n          onBlur={() => state !== \"disabled\" && handleBlur()}\n          tabIndex={0}\n        >\n          <div className={`${styles.field} quill-ui-next-textfield-content`}>\n            {/* Normal Input */}\n            {!isGroup && !isLeftGroup && (\n              <>\n                {iconLeft && (\n                  <div\n                    className={[styles.iconLeft, \"textfield-icon\"].join(\" \")}\n                  >\n                    {iconLeft}\n                  </div>\n                )}\n\n                <div className={styles.labelLeft}>{labelLeft}</div>\n              </>\n            )}\n\n            {/*  Group Addon */}\n            {isGroup && (\n              <div className={styles.addonLeft}>\n                <div className={styles.labelLeft}>{labelLeft}</div>\n              </div>\n            )}\n\n            {/* Left Group Addon */}\n            {isLeftGroup && (\n              <div className=\"left-group-addon\" onClick={onAddonLeftClick}>\n                <div className={[styles.iconLeft, \"textfield-icon\"].join(\" \")}>\n                  {iconLeft}\n                </div>\n                <div className=\"left-group-addon-content\">\n                  <div className=\"left-group-addon-content-label\">\n                    {labelLeft}\n                  </div>\n                  <div className=\"left-group-addon-content-value\">\n                    {labelLeftValue}\n                  </div>\n                </div>\n                {iconLeftSecondary && (\n                  <div\n                    className={[styles.iconLeft, \"textfield-icon\"].join(\" \")}\n                  >\n                    {iconLeftSecondary}\n                  </div>\n                )}\n              </div>\n            )}\n\n            {renderInputContents()}\n\n            {isGroup && (\n              <div className={styles.addonRight}>\n                <div className={styles.labelRight}>{labelRight}</div>\n              </div>\n            )}\n          </div>\n          {customInnerContent && customInnerContent}\n        </div>\n\n        {/* This is required to properly set status icon color */}\n        <div className={styles.message + \" quill-ui-next-hidden\"}></div>\n\n        {(message || showCharacterCounter) && (\n          <div className={styles.messageCharacterCounter}>\n            {message && <div className={styles.message}>{message}</div>}\n            {showCharacterCounter && (\n              <div className={styles.characterCounter}>\n                {typeof value === \"string\"\n                  ? value.length\n                  : value?.toString().length}\n                /{maxLength}\n              </div>\n            )}\n          </div>\n        )}\n        {messages && (\n          <div className={styles.passwordStrength}>\n            {messages.map(({ icon, type, text }, index) => {\n              const statusType = MESSAGE_STATUS_STYLES[type];\n\n              return (\n                <div\n                  key={index}\n                  className={`${statusType} textfield-message-${type}`}\n                >\n                  {icon ? icon : MESSAGE_ICONS[type]}\n                  <div className={styles.message1}>{text}</div>\n                </div>\n              );\n            })}\n          </div>\n        )}\n        {customContent && customContent}\n      </div>\n    );\n  }\n);\n\nexport default TextFieldAtom;\n"],"names":["stylesLabelled","stylesLabelless","forwardRef","LabelPairedCircleCheckSmBoldIcon","LabelPairedTriangleExclamationSmBoldIcon","LabelPairedCircleCheckCaptionBoldIcon","LabelPairedCircleXmarkCaptionBoldIcon","LabelPairedCircleCaptionBoldIcon","useState","hasInputValue","useRef","useEffect","jsxs","Fragment","jsx","AnimatePresence","motion","type"],"mappings":"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"}