feat: implement new contact form and modal for improved user inquiries

- Introduced a new ContactForm component to streamline user inquiries with validation and submission handling.
- Added ContactFormModal to encapsulate the contact form in a modal dialog, enhancing user experience.
- Updated the Pricing component to include a button that opens the contact modal for enterprise inquiries.
- Refactored the ContactPage to utilize the new ContactForm component, simplifying the code and improving maintainability.
- Updated TypeScript configuration to include additional type definitions for better type safety.
This commit is contained in:
Mauricio Siu
2025-12-08 14:37:47 -06:00
parent 0a5e3a160e
commit 66bcafa9cc
7 changed files with 775 additions and 397 deletions

186
pnpm-lock.yaml generated
View File

@@ -121,6 +121,9 @@ importers:
'@radix-ui/react-avatar':
specifier: ^1.1.1
version: 1.1.1(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@radix-ui/react-dialog':
specifier: 1.1.15
version: 1.1.15(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@radix-ui/react-scroll-area':
specifier: ^1.2.0
version: 1.2.0(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
@@ -5321,6 +5324,12 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-compose-refs@1.1.2(@types/react@18.3.5)(react@18.2.0)':
dependencies:
react: 18.2.0
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-compose-refs@1.1.2(@types/react@18.3.5)(react@19.2.1)':
dependencies:
react: 19.2.1
@@ -5339,12 +5348,40 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-context@1.1.2(@types/react@18.3.5)(react@18.2.0)':
dependencies:
react: 18.2.0
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-context@1.1.2(@types/react@18.3.5)(react@19.2.1)':
dependencies:
react: 19.2.1
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-dialog@1.1.15(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.5)(react@18.2.0)
'@radix-ui/react-context': 1.1.2(@types/react@18.3.5)(react@18.2.0)
'@radix-ui/react-dismissable-layer': 1.1.11(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@radix-ui/react-focus-guards': 1.1.3(@types/react@18.3.5)(react@18.2.0)
'@radix-ui/react-focus-scope': 1.1.7(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@radix-ui/react-id': 1.1.1(@types/react@18.3.5)(react@18.2.0)
'@radix-ui/react-portal': 1.1.9(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@radix-ui/react-presence': 1.1.5(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@radix-ui/react-slot': 1.2.3(@types/react@18.3.5)(react@18.2.0)
'@radix-ui/react-use-controllable-state': 1.2.2(@types/react@18.3.5)(react@18.2.0)
aria-hidden: 1.2.4
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
react-remove-scroll: 2.7.2(@types/react@18.3.5)(react@18.2.0)
optionalDependencies:
'@types/react': 18.3.5
'@types/react-dom': 18.3.0
'@radix-ui/react-dialog@1.1.15(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)':
dependencies:
'@radix-ui/primitive': 1.1.3
@@ -5405,6 +5442,19 @@ snapshots:
'@types/react': 18.3.5
'@types/react-dom': 18.3.0
'@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
'@radix-ui/primitive': 1.1.3
'@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.5)(react@18.2.0)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.5)(react@18.2.0)
'@radix-ui/react-use-escape-keydown': 1.1.1(@types/react@18.3.5)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
optionalDependencies:
'@types/react': 18.3.5
'@types/react-dom': 18.3.0
'@radix-ui/react-dismissable-layer@1.1.11(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)':
dependencies:
'@radix-ui/primitive': 1.1.3
@@ -5439,6 +5489,12 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-focus-guards@1.1.3(@types/react@18.3.5)(react@18.2.0)':
dependencies:
react: 18.2.0
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-focus-guards@1.1.3(@types/react@18.3.5)(react@19.2.1)':
dependencies:
react: 19.2.1
@@ -5456,6 +5512,17 @@ snapshots:
'@types/react': 18.3.5
'@types/react-dom': 18.3.0
'@radix-ui/react-focus-scope@1.1.7(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.5)(react@18.2.0)
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.5)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
optionalDependencies:
'@types/react': 18.3.5
'@types/react-dom': 18.3.0
'@radix-ui/react-focus-scope@1.1.7(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.5)(react@19.2.1)
@@ -5474,6 +5541,13 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-id@1.1.1(@types/react@18.3.5)(react@18.2.0)':
dependencies:
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.5)(react@18.2.0)
react: 18.2.0
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-id@1.1.1(@types/react@18.3.5)(react@19.2.1)':
dependencies:
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.5)(react@19.2.1)
@@ -5608,6 +5682,16 @@ snapshots:
'@types/react': 18.3.5
'@types/react-dom': 18.3.0
'@radix-ui/react-portal@1.1.9(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.5)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
optionalDependencies:
'@types/react': 18.3.5
'@types/react-dom': 18.3.0
'@radix-ui/react-portal@1.1.9(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)':
dependencies:
'@radix-ui/react-primitive': 2.1.3(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)
@@ -5628,6 +5712,16 @@ snapshots:
'@types/react': 18.3.5
'@types/react-dom': 18.3.0
'@radix-ui/react-presence@1.1.5(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.5)(react@18.2.0)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.5)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
optionalDependencies:
'@types/react': 18.3.5
'@types/react-dom': 18.3.0
'@radix-ui/react-presence@1.1.5(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.5)(react@19.2.1)
@@ -5647,6 +5741,15 @@ snapshots:
'@types/react': 18.3.5
'@types/react-dom': 18.3.0
'@radix-ui/react-primitive@2.1.3(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
'@radix-ui/react-slot': 1.2.3(@types/react@18.3.5)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
optionalDependencies:
'@types/react': 18.3.5
'@types/react-dom': 18.3.0
'@radix-ui/react-primitive@2.1.3(@types/react-dom@18.3.0)(@types/react@18.3.5)(react-dom@19.2.1(react@19.2.1))(react@19.2.1)':
dependencies:
'@radix-ui/react-slot': 1.2.3(@types/react@18.3.5)(react@19.2.1)
@@ -5789,6 +5892,13 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-slot@1.2.3(@types/react@18.3.5)(react@18.2.0)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.5)(react@18.2.0)
react: 18.2.0
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-slot@1.2.3(@types/react@18.3.5)(react@19.2.1)':
dependencies:
'@radix-ui/react-compose-refs': 1.1.2(@types/react@18.3.5)(react@19.2.1)
@@ -5876,6 +5986,12 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-use-callback-ref@1.1.1(@types/react@18.3.5)(react@18.2.0)':
dependencies:
react: 18.2.0
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-use-callback-ref@1.1.1(@types/react@18.3.5)(react@19.2.1)':
dependencies:
react: 19.2.1
@@ -5889,6 +6005,14 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.3.5)(react@18.2.0)':
dependencies:
'@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.5)(react@18.2.0)
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.5)(react@18.2.0)
react: 18.2.0
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-use-controllable-state@1.2.2(@types/react@18.3.5)(react@19.2.1)':
dependencies:
'@radix-ui/react-use-effect-event': 0.0.2(@types/react@18.3.5)(react@19.2.1)
@@ -5897,6 +6021,13 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-use-effect-event@0.0.2(@types/react@18.3.5)(react@18.2.0)':
dependencies:
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.5)(react@18.2.0)
react: 18.2.0
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-use-effect-event@0.0.2(@types/react@18.3.5)(react@19.2.1)':
dependencies:
'@radix-ui/react-use-layout-effect': 1.1.1(@types/react@18.3.5)(react@19.2.1)
@@ -5911,6 +6042,13 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-use-escape-keydown@1.1.1(@types/react@18.3.5)(react@18.2.0)':
dependencies:
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.5)(react@18.2.0)
react: 18.2.0
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-use-escape-keydown@1.1.1(@types/react@18.3.5)(react@19.2.1)':
dependencies:
'@radix-ui/react-use-callback-ref': 1.1.1(@types/react@18.3.5)(react@19.2.1)
@@ -5924,6 +6062,12 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.3.5)(react@18.2.0)':
dependencies:
react: 18.2.0
optionalDependencies:
'@types/react': 18.3.5
'@radix-ui/react-use-layout-effect@1.1.1(@types/react@18.3.5)(react@19.2.1)':
dependencies:
react: 19.2.1
@@ -8228,6 +8372,14 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.5
react-remove-scroll-bar@2.3.8(@types/react@18.3.5)(react@18.2.0):
dependencies:
react: 18.2.0
react-style-singleton: 2.2.3(@types/react@18.3.5)(react@18.2.0)
tslib: 2.8.1
optionalDependencies:
'@types/react': 18.3.5
react-remove-scroll-bar@2.3.8(@types/react@18.3.5)(react@19.2.1):
dependencies:
react: 19.2.1
@@ -8247,6 +8399,17 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.5
react-remove-scroll@2.7.2(@types/react@18.3.5)(react@18.2.0):
dependencies:
react: 18.2.0
react-remove-scroll-bar: 2.3.8(@types/react@18.3.5)(react@18.2.0)
react-style-singleton: 2.2.3(@types/react@18.3.5)(react@18.2.0)
tslib: 2.8.1
use-callback-ref: 1.3.3(@types/react@18.3.5)(react@18.2.0)
use-sidecar: 1.1.3(@types/react@18.3.5)(react@18.2.0)
optionalDependencies:
'@types/react': 18.3.5
react-remove-scroll@2.7.2(@types/react@18.3.5)(react@19.2.1):
dependencies:
react: 19.2.1
@@ -8267,6 +8430,14 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.5
react-style-singleton@2.2.3(@types/react@18.3.5)(react@18.2.0):
dependencies:
get-nonce: 1.0.1
react: 18.2.0
tslib: 2.8.1
optionalDependencies:
'@types/react': 18.3.5
react-style-singleton@2.2.3(@types/react@18.3.5)(react@19.2.1):
dependencies:
get-nonce: 1.0.1
@@ -8827,6 +8998,13 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.5
use-callback-ref@1.3.3(@types/react@18.3.5)(react@18.2.0):
dependencies:
react: 18.2.0
tslib: 2.8.1
optionalDependencies:
'@types/react': 18.3.5
use-callback-ref@1.3.3(@types/react@18.3.5)(react@19.2.1):
dependencies:
react: 19.2.1
@@ -8842,6 +9020,14 @@ snapshots:
optionalDependencies:
'@types/react': 18.3.5
use-sidecar@1.1.3(@types/react@18.3.5)(react@18.2.0):
dependencies:
detect-node-es: 1.1.0
react: 18.2.0
tslib: 2.8.1
optionalDependencies:
'@types/react': 18.3.5
use-sidecar@1.1.3(@types/react@18.3.5)(react@19.2.1):
dependencies:
detect-node-es: 1.1.0