should render correctly random 1`] = `
       class="emotion-0 emotion-1"
       novalidate=""
     >
-      
+      
         
-          
+          
+          
+            *
+          
+        
+        
-        
-      
 
-    
-  
-
-`;
-
-exports[`TextInputField > should render correctly required 1`] = `
-
-  .emotion-0 {
-  display: contents;
-}
-
-.emotion-2 {
-  position: relative;
-}
-
-.emotion-4 {
-  -webkit-transition: border-color 0.2s ease,box-shadow 0.2s ease;
-  transition: border-color 0.2s ease,box-shadow 0.2s ease;
-  -webkit-appearance: none;
-  -moz-appearance: none;
-  -ms-appearance: none;
-  appearance: none;
-  background-color: #ffffff;
-  background-image: none;
-  border: 1px solid #d9dadd;
-  border-radius: 0.25rem;
-  color: #3f4250;
-  display: block;
-  max-width: 100%;
-  outline: none;
-  position: relative;
-  width: 100%;
-  padding-left: 0.5rem;
-  padding-right: 0.5rem;
-  padding-top: 14px;
-  font-size: 16px;
-  line-height: 24px;
-  height: 48px;
-  padding-left: 8px;
-  padding-right: 20px;
-  padding-top: 14px;
-  padding: 8px;
-  padding-right: calc(1 * 2rem);
-}
-
-.emotion-4::-webkit-input-placeholder {
-  color: #727683;
-  opacity: 0;
-}
-
-.emotion-4::-moz-placeholder {
-  color: #727683;
-  opacity: 0;
-}
-
-.emotion-4:-ms-input-placeholder {
-  color: #727683;
-  opacity: 0;
-}
-
-.emotion-4::placeholder {
-  color: #727683;
-  opacity: 0;
-}
-
-.emotion-4:hover,
-.emotion-4:focus {
-  border-color: #792dd4;
-}
-
-.emotion-4:focus {
-  box-shadow: 0px 0px 0px 3px #8c40ef40;
-  border-color: #792dd4;
-}
-
-.emotion-4::-webkit-input-placeholder {
-  opacity: 1;
-}
-
-.emotion-4::-moz-placeholder {
-  opacity: 1;
-}
-
-.emotion-4:-ms-input-placeholder {
-  opacity: 1;
-}
-
-.emotion-4::placeholder {
-  opacity: 1;
-}
-
-.emotion-6 {
-  pointer-events: none;
-  position: absolute;
-  right: 0;
-  bottom: 0;
-  top: 0;
-  padding: 0 0.5rem;
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-  gap: 0.5rem;
-  -webkit-align-items: center;
-  -webkit-box-align: center;
-  -ms-flex-align: center;
-  align-items: center;
-  -webkit-transition: -webkit-transform 150ms,color 150ms;
-  transition: transform 150ms,color 150ms;
-  color: #727683;
-}
-
-.emotion-6:hover,
-.emotion-6:focus-within {
-  color: #3f4250;
-}
-
-.emotion-8 {
-  color: #b3144d;
-  font-size: 1rem;
-  font-family: Inter,Asap,sans-serif;
-  font-weight: 500;
-  letter-spacing: 0;
-  line-height: 1.5rem;
-  text-transform: none;
-  -webkit-text-decoration: none;
-  text-decoration: none;
-}
-
-.emotion-10 {
-  height: auto;
-}
-
-.emotion-10[data-is-animated="true"] {
-  -webkit-transition: max-height 300ms ease-out,opacity 300ms ease-out;
-  transition: max-height 300ms ease-out,opacity 300ms ease-out;
-}
-
-.emotion-12 {
-  font-size: 12px;
-  color: #b3144d;
-  padding-top: 0.125rem;
-}
-
-
-
-`;
-
-exports[`TextInputField > should render correctly with minLength 1`] = `
-
-  .emotion-0 {
-  display: contents;
-}
-
-.emotion-2 {
-  position: relative;
-}
-
-.emotion-4 {
-  -webkit-transition: border-color 0.2s ease,box-shadow 0.2s ease;
-  transition: border-color 0.2s ease,box-shadow 0.2s ease;
-  -webkit-appearance: none;
-  -moz-appearance: none;
-  -ms-appearance: none;
-  appearance: none;
-  background-color: #ffffff;
-  background-image: none;
-  border: 1px solid #d9dadd;
-  border-radius: 0.25rem;
-  color: #3f4250;
-  display: block;
-  max-width: 100%;
-  outline: none;
-  position: relative;
-  width: 100%;
-  padding-left: 0.5rem;
-  padding-right: 0.5rem;
-  padding-top: 14px;
-  font-size: 16px;
-  line-height: 24px;
-  height: 48px;
-  padding-left: 8px;
-  padding-right: 20px;
-  padding-top: 14px;
-  padding: 8px;
-  border-color: #b3144d;
-}
-
-.emotion-4::-webkit-input-placeholder {
-  color: #727683;
-  opacity: 0;
-}
-
-.emotion-4::-moz-placeholder {
-  color: #727683;
-  opacity: 0;
-}
-
-.emotion-4:-ms-input-placeholder {
-  color: #727683;
-  opacity: 0;
-}
-
-.emotion-4::placeholder {
-  color: #727683;
-  opacity: 0;
-}
-
-.emotion-4:hover,
-.emotion-4:focus {
-  border-color: #792dd4;
-}
-
-.emotion-4:focus {
-  box-shadow: 0px 0px 0px 3px #8c40ef40;
-  border-color: #792dd4;
-}
-
-.emotion-4::-webkit-input-placeholder {
-  opacity: 1;
-}
-
-.emotion-4::-moz-placeholder {
-  opacity: 1;
-}
-
-.emotion-4:-ms-input-placeholder {
-  opacity: 1;
-}
-
-.emotion-4::placeholder {
-  opacity: 1;
-}
-
-.emotion-4:hover,
-.emotion-4:focus {
-  border-color: #92103f;
-}
-
-.emotion-4:focus {
-  box-shadow: 0px 0px 0px 3px #f91b6c40;
-  border-color: #92103f;
-}
-
-.emotion-6 {
-  height: auto;
-}
-
-.emotion-6[data-is-animated="true"] {
-  -webkit-transition: max-height 300ms ease-out,opacity 300ms ease-out;
-  transition: max-height 300ms ease-out,opacity 300ms ease-out;
-}
-
-.emotion-8 {
-  font-size: 12px;
-  color: #b3144d;
-  padding-top: 0.125rem;
-}
-
-
 
diff --git a/packages/form/src/components/TextInputField/__tests__/index.test.tsx b/packages/form/src/components/TextInputField/__tests__/index.test.tsx
index 9f61d32301..99ef9b07dc 100644
--- a/packages/form/src/components/TextInputField/__tests__/index.test.tsx
+++ b/packages/form/src/components/TextInputField/__tests__/index.test.tsx
@@ -1,82 +1,48 @@
-import { screen, waitFor } from '@testing-library/react'
+import { renderHook, screen, waitFor } from '@testing-library/react'
 import { userEvent } from '@testing-library/user-event'
-import { mockFormErrors, renderWithForm } from '@utils/test'
-import { describe, expect, test } from 'vitest'
+import { mockFormErrors, renderWithForm, renderWithTheme } from '@utils/test'
+import { useForm } from 'react-hook-form'
+import { describe, expect, test, vi } from 'vitest'
 import { TextInputField } from '..'
+import { Submit } from '../..'
+import { Form } from '../../Form'
 
 describe('TextInputField', () => {
   test('should render correctly', () => {
-    const { asFragment } = renderWithForm(
)
-    expect(asFragment()).toMatchSnapshot()
-  })
-
-  test('should render correctly generated', () => {
     const { asFragment } = renderWithForm(
-      
,
+      
,
     )
     expect(asFragment()).toMatchSnapshot()
   })
 
-  test('should render correctly random', () => {
-    const { asFragment } = renderWithForm(
-      
,
+  test('should render correctly generated', async () => {
+    const onSubmit = vi.fn()
+    const { result } = renderHook(() =>
+      useForm<{ test: string | null }>({ defaultValues: { test: null } }),
     )
-    expect(asFragment()).toMatchSnapshot()
-  })
 
-  test('should render correctly notice', () => {
-    const { asFragment } = renderWithForm(
-      
,
+    const { asFragment } = renderWithTheme(
+      
,
     )
-    expect(asFragment()).toMatchSnapshot()
-  })
 
-  test('should render correctly required', () => {
-    const { asFragment } = renderWithForm(
-      
,
-    )
-    expect(asFragment()).toMatchSnapshot()
-  })
-
-  test('should render correctly id', () => {
-    const { asFragment } = renderWithForm(
-      
,
-    )
-    expect(asFragment()).toMatchSnapshot()
-  })
-
-  test('should render correctly disabled', () => {
-    const { asFragment } = renderWithForm(
-      
,
-    )
-
-    const input = screen.getByRole('textbox')
-    expect(input).toBeDisabled()
-    expect(asFragment()).toMatchSnapshot()
-  })
-
-  test('should render correctly with minLength', async () => {
-    const { asFragment } = renderWithForm(
-      
,
-      {
-        defaultValues: {
-          test: null,
-        },
-      },
-    )
-    const input = screen.getByRole('textbox')
-    await userEvent.type(input, 'test')
-    input.blur()
+    await userEvent.click(screen.getByText('Submit'))
+    await waitFor(() => {
+      expect(onSubmit).toHaveBeenCalledTimes(0)
+    })
+    const textInput = screen.getByLabelText('Test')
+    await userEvent.type(textInput, 'This is an example')
+    await userEvent.click(screen.getByText('Submit'))
     await waitFor(() => {
-      expect(
-        screen.getByText(
-          mockFormErrors.minLength({
-            label: 'test',
-            minLength: 13,
-            value: 'test',
-          }),
-        ),
-      ).toBeVisible()
+      expect(onSubmit.mock.calls[0][0]).toEqual({
+        test: 'This is an example',
+      })
     })
     expect(asFragment()).toMatchSnapshot()
   })
diff --git a/packages/form/src/components/TextInputField/index.tsx b/packages/form/src/components/TextInputField/index.tsx
index 3b34ac227b..a26cfdc277 100644
--- a/packages/form/src/components/TextInputField/index.tsx
+++ b/packages/form/src/components/TextInputField/index.tsx
@@ -1,7 +1,7 @@
 'use client'
 
 import { TextInput } from '@ultraviolet/ui'
-import type { ComponentProps, FocusEvent, Ref } from 'react'
+import type { ComponentProps } from 'react'
 import type { FieldPath, FieldValues, Path, PathValue } from 'react-hook-form'
 import { useController } from 'react-hook-form'
 import { useErrors } from '../../providers'
@@ -12,122 +12,45 @@ type TextInputFieldProps<
   TFieldValues extends FieldValues,
   TFieldName extends FieldPath
,
 > = BaseFieldProps &
-  Partial<
-    Pick<
-      ComponentProps,
-      | 'autoCapitalize'
-      | 'autoComplete'
-      | 'autoCorrect'
-      | 'autoFocus'
-      | 'autoSave'
-      | 'cols'
-      | 'disabled'
-      | 'fillAvailable'
-      | 'generated'
-      | 'id'
-      | 'multiline'
-      | 'notice'
-      | 'onBlur'
-      | 'onFocus'
-      | 'onKeyDown'
-      | 'onKeyUp'
-      | 'placeholder'
-      | 'random'
-      | 'readOnly'
-      | 'resizable'
-      | 'rows'
-      | 'type'
-      | 'noTopLabel'
-      | 'unit'
-      | 'valid'
-      | 'size'
-      | 'maxLength'
-      | 'minLength'
-      | 'min'
-      | 'max'
-      | 'data-testid'
-    >
+  Omit<
+    ComponentProps,
+    'value' | 'error' | 'name' | 'onChange'
   > & {
-    className?: string
     regex?: (RegExp | RegExp[])[]
-
-    format?: (value: unknown) => PathValue>
-    parse?: (value: string) => PathValue>
-
-    customError?: string
-    formatOnBlur?: boolean
-    innerRef?: Ref
   }
 
 /**
- * @deprecated This component is deprecated, please use `TextInputFieldV2` instead
+ * This component offers a form field based on Ultraviolet UI TextInput component
  */
 export const TextInputField = <
   TFieldValues extends FieldValues,
   TFieldName extends FieldPath = FieldPath,
 >({
-  autoCapitalize,
-  autoComplete,
-  autoCorrect,
-  autoFocus,
-  autoSave,
-  className,
-  cols,
-  disabled,
-  fillAvailable,
-  generated,
-  id,
-  label = '',
-  multiline,
-  name,
-  noTopLabel,
-  notice,
+  regex: regexes,
   onChange,
-  onFocus,
-  onKeyDown,
-  onKeyUp,
+  label,
+  required = false,
+  name,
   onBlur,
-  placeholder,
-  random,
-  readOnly,
-  required,
-  resizable,
-  rows,
-  type,
-  unit,
-  size,
-  valid,
-  parse,
-  format,
-  formatOnBlur = false,
-  regex: regexes,
-  defaultValue,
-  customError,
-  innerRef,
-  shouldUnregister = false,
-  'data-testid': dataTestId,
-  validate,
-  min,
-  max,
   minLength,
   maxLength,
+  'aria-label': ariaLabel,
+  shouldUnregister,
+  validate,
   control,
+  ...props
 }: TextInputFieldProps) => {
   const { getError } = useErrors()
+
   const {
     field,
     fieldState: { error },
   } = useController({
     name,
-    defaultValue,
     shouldUnregister,
     control,
     rules: {
       required,
-      minLength,
-      maxLength,
-      min,
-      max,
       validate: {
         ...(regexes
           ? {
@@ -136,84 +59,41 @@ export const TextInputField = <
           : {}),
         ...validate,
       },
+      minLength,
+      maxLength,
     },
   })
 
-  const transformedValue = () => {
-    if (format && !formatOnBlur) {
-      return format(field.value) as string
-    }
-
-    return field.value as string
-  }
-
   return (
     ) => {
-        field.onBlur()
+      minLength={minLength}
+      maxLength={maxLength}
+      name={name}
+      onBlur={event => {
         onBlur?.(event)
-        if (formatOnBlur && format) {
-          field.onChange(format(field.value))
-        }
-      }}
-      onChange={(event: string) => {
-        if (parse) {
-          field.onChange(parse(event))
-          onChange?.(parse(event))
-        } else {
-          field.onChange(event)
-          onChange?.(event as PathValue>)
-        }
+        field.onBlur()
       }}
-      onFocus={(event: FocusEvent) => {
-        onFocus?.(event)
+      onChange={event => {
+        field.onChange(event)
+        onChange?.(
+          event.target.value as PathValue>,
+        )
       }}
-      onKeyUp={onKeyUp}
-      onKeyDown={onKeyDown}
-      placeholder={placeholder}
-      random={random}
-      readOnly={readOnly}
-      resizable={resizable}
-      rows={rows}
-      type={type}
-      noTopLabel={noTopLabel}
-      unit={unit}
-      valid={valid}
-      size={size}
-      value={transformedValue()}
-      ref={innerRef}
-      data-testid={dataTestId}
+      required={required}
+      value={field.value === undefined ? '' : field.value}
+      aria-label={ariaLabel}
     />
   )
 }
diff --git a/packages/form/src/components/TextInputFieldV2/__stories__/Template.stories.tsx b/packages/form/src/components/TextInputFieldV2/__stories__/Template.stories.tsx
deleted file mode 100644
index 85b16cb918..0000000000
--- a/packages/form/src/components/TextInputFieldV2/__stories__/Template.stories.tsx
+++ /dev/null
@@ -1,22 +0,0 @@
-import type { StoryFn } from '@storybook/react'
-import { Stack } from '@ultraviolet/ui'
-import type { ComponentProps } from 'react'
-import { TextInputField } from '..'
-import { Submit } from '../..'
-
-export const Template: StoryFn<
-  ComponentProps
-> = args => (
-  
-    
-    Submit
-  
-)
-
-Template.args = {
-  label: 'Label',
-  name: 'example',
-  role: 'status',
-  'aria-live': 'polite',
-  'aria-atomic': 'true',
-}
diff --git a/packages/form/src/components/TextInputFieldV2/__stories__/index.stories.tsx b/packages/form/src/components/TextInputFieldV2/__stories__/index.stories.tsx
deleted file mode 100644
index d673bca7f6..0000000000
--- a/packages/form/src/components/TextInputFieldV2/__stories__/index.stories.tsx
+++ /dev/null
@@ -1,71 +0,0 @@
-import type { Meta } from '@storybook/react'
-import { Snippet, Stack, Text } from '@ultraviolet/ui'
-import { Form, TextInputFieldV2 } from '../..'
-import { useForm } from '../../..'
-import { mockErrors } from '../../../mocks'
-
-export default {
-  component: TextInputFieldV2,
-  decorators: [
-    ChildStory => {
-      const methods = useForm()
-      const {
-        errors,
-        isDirty,
-        isSubmitting,
-        touchedFields,
-        submitCount,
-        dirtyFields,
-        isValid,
-        isLoading,
-        isSubmitted,
-        isValidating,
-        isSubmitSuccessful,
-      } = methods.formState
-
-      return (
-        
-      )
-    },
-  ],
-  title: 'Form/Components/Fields/TextInputFieldV2',
-} as Meta
-
-export { Playground } from './Playground.stories'
-export { Required } from './Required.stories'
diff --git a/packages/form/src/components/TextInputFieldV2/__tests__/__snapshots__/index.test.tsx.snap b/packages/form/src/components/TextInputFieldV2/__tests__/__snapshots__/index.test.tsx.snap
deleted file mode 100644
index bcd965f7ba..0000000000
--- a/packages/form/src/components/TextInputFieldV2/__tests__/__snapshots__/index.test.tsx.snap
+++ /dev/null
@@ -1,583 +0,0 @@
-// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
-
-exports[`TextInputFieldV2 > should render correctly 1`] = `
-
-  .emotion-0 {
-  display: contents;
-}
-
-.emotion-2 {
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-  gap: 0.25rem;
-  -webkit-flex-direction: column;
-  -ms-flex-direction: column;
-  flex-direction: column;
-  -webkit-align-items: normal;
-  -webkit-box-align: normal;
-  -ms-flex-align: normal;
-  align-items: normal;
-  -webkit-box-pack: normal;
-  -ms-flex-pack: normal;
-  -webkit-justify-content: normal;
-  justify-content: normal;
-  -webkit-box-flex-wrap: nowrap;
-  -webkit-flex-wrap: nowrap;
-  -ms-flex-wrap: nowrap;
-  flex-wrap: nowrap;
-}
-
-.emotion-5 {
-  color: #3f4250;
-  font-size: 1rem;
-  font-family: Inter,Asap,sans-serif;
-  font-weight: 500;
-  letter-spacing: 0;
-  line-height: 1.5rem;
-  text-transform: none;
-  -webkit-text-decoration: none;
-  text-decoration: none;
-  cursor: pointer;
-}
-
-.emotion-7 {
-  display: -webkit-box;
-  display: -webkit-flex;
-  display: -ms-flexbox;
-  display: flex;
-  -webkit-flex-direction: row;
-  -ms-flex-direction: row;
-  flex-direction: row;
-  height: 3rem;
-  background: #ffffff;
-  border: 1px solid #d9dadd;
-  border-radius: 0.25rem;
-}
-
-.emotion-7>.emotion-10 {
-  color: #3f4250;
-}
-
-.emotion-7>.emotion-10::-webkit-input-placeholder {
-  color: #727683;
-}
-
-.emotion-7>.emotion-10::-moz-placeholder {
-  color: #727683;
-}
-
-.emotion-7>.emotion-10:-ms-input-placeholder {
-  color: #727683;
-}
-
-.emotion-7>.emotion-10::placeholder {
-  color: #727683;
-}
-
-.emotion-7[data-success='true'] {
-  border-color: #22674e;
-}
-
-.emotion-7[data-error='true'] {
-  border-color: #b3144d;
-}
-
-.emotion-7[data-readonly='true'] {
-  background: #f9f9fa;
-  border-color: #d9dadd;
-}
-
-.emotion-7[data-disabled='true'] {
-  background: #f3f3f4;
-  border-color: #e9eaeb;
-}
-
-.emotion-7[data-disabled='true']>.emotion-10 {
-  color: #b5b7bd;
-}
-
-.emotion-7[data-disabled='true']>.emotion-10::-webkit-input-placeholder {
-  color: #b5b7bd;
-}
-
-.emotion-7[data-disabled='true']>.emotion-10::-moz-placeholder {
-  color: #b5b7bd;
-}
-
-.emotion-7[data-disabled='true']>.emotion-10:-ms-input-placeholder {
-  color: #b5b7bd;
-}
-
-.emotion-7[data-disabled='true']>.emotion-10::placeholder {
-  color: #b5b7bd;
-}
-
-.emotion-7:not([data-disabled='true']):not([data-readonly]):hover {
-  border-color: #8c40ef;
-}
-
-.emotion-9 {
-  -webkit-flex: 1;
-  -ms-flex: 1;
-  flex: 1;
-  border: none;
-  outline: none;
-  height: 100%;
-  width: 100%;
-  padding-left: 1rem;
-  background: transparent;
-  font-size: 0.875rem;
-}
-
-.emotion-9[data-size='large'] {
-  font-size: 1rem;
-}
-
-.emotion-9[data-size='small'] {
-  padding-left: 0.5rem;
-}
-
-