feat: redesign information request form with two-column layout

- Add wave.svg icon for form header
- Redesign form with side-by-side layout: form fields left, info card right
- Show different content based on request type (SaaS vs Self-hosted)
- Different titles, subtitles, and message placeholders per type
- Use Card component for info card section
- Submit navigates to home page (/)
- Back returns to card selection view
- Update i18n translations for all form labels and placeholders

Co-authored-by: openhands <openhands@all-hands.dev>
This commit is contained in:
openhands
2026-03-19 15:10:35 +00:00
parent de75609e7a
commit 37561714a6
5 changed files with 388 additions and 211 deletions

View File

@@ -1,10 +1,87 @@
import { useState } from "react";
import { useTranslation } from "react-i18next";
import { useNavigate } from "react-router";
import { I18nKey } from "#/i18n/declaration";
import { BrandButton } from "#/components/features/settings/brand-button";
import { Card } from "#/ui/card";
import { Text } from "#/ui/typography";
import CloudIcon from "#/icons/cloud.svg?react";
import StackedIcon from "#/icons/stacked.svg?react";
import WaveIcon from "#/icons/wave.svg?react";
export type RequestType = "saas" | "self-hosted";
interface FormInputProps {
id: string;
label: string;
value: string;
placeholder: string;
type?: "text" | "email";
onChange: (value: string) => void;
}
function FormInput({
id,
label,
value,
placeholder,
type = "text",
onChange,
}: FormInputProps) {
return (
<div className="flex flex-col gap-1.5 w-full">
<label
htmlFor={id}
className="text-sm font-medium text-white cursor-pointer"
>
{label}
</label>
<input
id={id}
type={type}
value={value}
onChange={(e) => onChange(e.target.value)}
placeholder={placeholder}
className="w-full rounded-md border border-[#3a3a3a] bg-transparent px-4 py-2.5 text-sm text-white placeholder:text-neutral-500 focus:border-white focus:outline-none transition-colors"
/>
</div>
);
}
interface FormTextareaProps {
id: string;
label: string;
value: string;
placeholder: string;
onChange: (value: string) => void;
}
function FormTextarea({
id,
label,
value,
placeholder,
onChange,
}: FormTextareaProps) {
return (
<div className="flex flex-col gap-1.5 w-full">
<label
htmlFor={id}
className="text-sm font-medium text-white cursor-pointer"
>
{label}
</label>
<textarea
id={id}
value={value}
onChange={(e) => onChange(e.target.value)}
placeholder={placeholder}
rows={4}
className="w-full rounded-md border border-[#3a3a3a] bg-transparent px-4 py-2.5 text-sm text-white placeholder:text-neutral-500 focus:border-white focus:outline-none transition-colors resize-none"
/>
</div>
);
}
interface InformationRequestFormProps {
requestType: RequestType;
onBack: () => void;
@@ -15,125 +92,136 @@ export function InformationRequestForm({
onBack,
}: InformationRequestFormProps) {
const { t } = useTranslation();
const navigate = useNavigate();
const [formData, setFormData] = useState({
name: "",
email: "",
company: "",
email: "",
message: "",
});
const handleInputChange = (
e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>,
) => {
const { name, value } = e.target;
setFormData((prev) => ({ ...prev, [name]: value }));
};
const handleSubmit = (e: React.FormEvent) => {
e.preventDefault();
// TODO: Implement form submission
console.log("Form submitted:", { requestType, ...formData });
navigate("/");
};
const title =
requestType === "saas"
? t(I18nKey.ENTERPRISE$SAAS_TITLE)
: t(I18nKey.ENTERPRISE$SELF_HOSTED_TITLE);
const isSaas = requestType === "saas";
const title = isSaas
? t(I18nKey.ENTERPRISE$FORM_SAAS_TITLE)
: t(I18nKey.ENTERPRISE$FORM_SELF_HOSTED_TITLE);
const subtitle = isSaas
? t(I18nKey.ENTERPRISE$FORM_SAAS_SUBTITLE)
: t(I18nKey.ENTERPRISE$FORM_SELF_HOSTED_SUBTITLE);
const cardTitle = isSaas
? t(I18nKey.ENTERPRISE$SAAS_TITLE)
: t(I18nKey.ENTERPRISE$SELF_HOSTED_TITLE);
const cardDescription = isSaas
? t(I18nKey.ENTERPRISE$SAAS_DESCRIPTION)
: t(I18nKey.ENTERPRISE$SELF_HOSTED_DESCRIPTION);
const messagePlaceholder = isSaas
? t(I18nKey.ENTERPRISE$FORM_MESSAGE_SAAS_PLACEHOLDER)
: t(I18nKey.ENTERPRISE$FORM_MESSAGE_SELF_HOSTED_PLACEHOLDER);
return (
<div
data-testid="information-request-form"
className="w-full max-w-md flex flex-col gap-6"
className="w-full max-w-4xl flex flex-col items-center gap-8"
>
<div className="text-center">
<h2 className="text-xl font-semibold text-white">{title}</h2>
<p className="text-[#8C8C8C] mt-2">
{t(I18nKey.ENTERPRISE$FORM_SUBTITLE)}
</p>
{/* Header */}
<div className="flex flex-col items-center gap-4">
<WaveIcon className="w-12 h-12" />
<div className="text-center flex flex-col gap-2">
<h1 className="text-2xl font-bold text-white">{title}</h1>
<Text className="text-[#8C8C8C]">{subtitle}</Text>
</div>
</div>
<form onSubmit={handleSubmit} className="flex flex-col gap-4">
<div className="flex flex-col gap-2">
<label htmlFor="name" className="text-sm text-white">
{t(I18nKey.ENTERPRISE$FORM_NAME_LABEL)}
</label>
<input
type="text"
{/* Content: Form + Card */}
<div className="w-full flex flex-col md:flex-row gap-6">
{/* Form */}
<form
onSubmit={handleSubmit}
className="flex-1 flex flex-col gap-4 max-w-lg"
>
<FormInput
id="name"
name="name"
label={t(I18nKey.ENTERPRISE$FORM_NAME_LABEL)}
value={formData.name}
onChange={handleInputChange}
required
className="px-4 py-2.5 bg-[#0D0D0D] border border-[#242424] rounded-sm text-white placeholder-[#8C8C8C] focus:outline-none focus:border-[#404040]"
placeholder={t(I18nKey.ENTERPRISE$FORM_NAME_PLACEHOLDER)}
onChange={(value) =>
setFormData((prev) => ({ ...prev, name: value }))
}
/>
</div>
<div className="flex flex-col gap-2">
<label htmlFor="email" className="text-sm text-white">
{t(I18nKey.ENTERPRISE$FORM_EMAIL_LABEL)}
</label>
<input
type="email"
id="email"
name="email"
value={formData.email}
onChange={handleInputChange}
required
className="px-4 py-2.5 bg-[#0D0D0D] border border-[#242424] rounded-sm text-white placeholder-[#8C8C8C] focus:outline-none focus:border-[#404040]"
placeholder={t(I18nKey.ENTERPRISE$FORM_EMAIL_PLACEHOLDER)}
/>
</div>
<div className="flex flex-col gap-2">
<label htmlFor="company" className="text-sm text-white">
{t(I18nKey.ENTERPRISE$FORM_COMPANY_LABEL)}
</label>
<input
type="text"
<FormInput
id="company"
name="company"
label={t(I18nKey.ENTERPRISE$FORM_COMPANY_LABEL)}
value={formData.company}
onChange={handleInputChange}
required
className="px-4 py-2.5 bg-[#0D0D0D] border border-[#242424] rounded-sm text-white placeholder-[#8C8C8C] focus:outline-none focus:border-[#404040]"
placeholder={t(I18nKey.ENTERPRISE$FORM_COMPANY_PLACEHOLDER)}
onChange={(value) =>
setFormData((prev) => ({ ...prev, company: value }))
}
/>
</div>
<div className="flex flex-col gap-2">
<label htmlFor="message" className="text-sm text-white">
{t(I18nKey.ENTERPRISE$FORM_MESSAGE_LABEL)}
</label>
<textarea
<FormInput
id="email"
label={t(I18nKey.ENTERPRISE$FORM_EMAIL_LABEL)}
type="email"
value={formData.email}
placeholder={t(I18nKey.ENTERPRISE$FORM_EMAIL_PLACEHOLDER)}
onChange={(value) =>
setFormData((prev) => ({ ...prev, email: value }))
}
/>
<FormTextarea
id="message"
name="message"
label={t(I18nKey.ENTERPRISE$FORM_MESSAGE_LABEL)}
value={formData.message}
onChange={handleInputChange}
rows={4}
className="px-4 py-2.5 bg-[#0D0D0D] border border-[#242424] rounded-sm text-white placeholder-[#8C8C8C] focus:outline-none focus:border-[#404040] resize-none"
placeholder={t(I18nKey.ENTERPRISE$FORM_MESSAGE_PLACEHOLDER)}
placeholder={messagePlaceholder}
onChange={(value) =>
setFormData((prev) => ({ ...prev, message: value }))
}
/>
</div>
<div className="flex flex-col gap-3 mt-4">
<BrandButton
type="submit"
variant="primary"
className="w-full px-6 py-2.5"
>
{t(I18nKey.ENTERPRISE$FORM_SUBMIT)}
</BrandButton>
<BrandButton
type="button"
variant="secondary"
onClick={onBack}
className="w-full px-6 py-2.5 bg-[#050505] text-white border border-[#242424] hover:bg-white hover:text-black"
>
{t(I18nKey.COMMON$BACK)}
</BrandButton>
</div>
</form>
{/* Buttons */}
<div className="flex gap-4 mt-4">
<button
type="button"
onClick={onBack}
className="flex-1 px-6 py-2.5 text-sm rounded-sm bg-transparent text-white border border-[#3a3a3a] hover:bg-[#1a1a1a] transition-colors"
>
{t(I18nKey.COMMON$BACK)}
</button>
<button
type="submit"
className="flex-1 px-6 py-2.5 text-sm rounded-sm bg-white text-black border border-white hover:bg-gray-100 transition-colors"
>
{t(I18nKey.ENTERPRISE$FORM_SUBMIT)}
</button>
</div>
</form>
{/* Info Card */}
<Card theme="dark" className="flex-1 flex-col p-6 gap-4 max-w-sm">
<div className="w-10 h-10">
{isSaas ? (
<CloudIcon className="w-10 h-10" />
) : (
<StackedIcon className="w-10 h-10" />
)}
</div>
<h3 className="text-lg font-semibold text-white">{cardTitle}</h3>
<Text className="text-[#8C8C8C]">{cardDescription}</Text>
</Card>
</div>
</div>
);
}

View File

@@ -1204,7 +1204,10 @@ export enum I18nKey {
ENTERPRISE$SELF_HOSTED_FEATURE_DATA_CONTROL = "ENTERPRISE$SELF_HOSTED_FEATURE_DATA_CONTROL",
ENTERPRISE$SELF_HOSTED_FEATURE_COMPLIANCE = "ENTERPRISE$SELF_HOSTED_FEATURE_COMPLIANCE",
ENTERPRISE$SELF_HOSTED_FEATURE_SUPPORT = "ENTERPRISE$SELF_HOSTED_FEATURE_SUPPORT",
ENTERPRISE$FORM_SUBTITLE = "ENTERPRISE$FORM_SUBTITLE",
ENTERPRISE$FORM_SAAS_TITLE = "ENTERPRISE$FORM_SAAS_TITLE",
ENTERPRISE$FORM_SAAS_SUBTITLE = "ENTERPRISE$FORM_SAAS_SUBTITLE",
ENTERPRISE$FORM_SELF_HOSTED_TITLE = "ENTERPRISE$FORM_SELF_HOSTED_TITLE",
ENTERPRISE$FORM_SELF_HOSTED_SUBTITLE = "ENTERPRISE$FORM_SELF_HOSTED_SUBTITLE",
ENTERPRISE$FORM_NAME_LABEL = "ENTERPRISE$FORM_NAME_LABEL",
ENTERPRISE$FORM_NAME_PLACEHOLDER = "ENTERPRISE$FORM_NAME_PLACEHOLDER",
ENTERPRISE$FORM_EMAIL_LABEL = "ENTERPRISE$FORM_EMAIL_LABEL",
@@ -1212,7 +1215,8 @@ export enum I18nKey {
ENTERPRISE$FORM_COMPANY_LABEL = "ENTERPRISE$FORM_COMPANY_LABEL",
ENTERPRISE$FORM_COMPANY_PLACEHOLDER = "ENTERPRISE$FORM_COMPANY_PLACEHOLDER",
ENTERPRISE$FORM_MESSAGE_LABEL = "ENTERPRISE$FORM_MESSAGE_LABEL",
ENTERPRISE$FORM_MESSAGE_PLACEHOLDER = "ENTERPRISE$FORM_MESSAGE_PLACEHOLDER",
ENTERPRISE$FORM_MESSAGE_SAAS_PLACEHOLDER = "ENTERPRISE$FORM_MESSAGE_SAAS_PLACEHOLDER",
ENTERPRISE$FORM_MESSAGE_SELF_HOSTED_PLACEHOLDER = "ENTERPRISE$FORM_MESSAGE_SELF_HOSTED_PLACEHOLDER",
ENTERPRISE$FORM_SUBMIT = "ENTERPRISE$FORM_SUBMIT",
COMMON$BACK = "COMMON$BACK",
}

View File

@@ -20473,22 +20473,73 @@
"tr": "Özel destek seçenekleri",
"uk": "Виділені варіанти підтримки"
},
"ENTERPRISE$FORM_SUBTITLE": {
"en": "Fill out the form below and we'll get back to you shortly.",
"ja": "以下のフォームにご記入ください。すぐにご連絡いたします。",
"zh-CN": "请填写以下表格,我们会尽快与您联系。",
"zh-TW": "請填寫以下表格,我們會盡快與您聯繫。",
"ko-KR": "아래 양식을 작성해 주시면 곧 연락드리겠습니다.",
"no": "Fyll ut skjemaet nedenfor, så tar vi kontakt snart.",
"ar": "املأ النموذج أدناه وسنتواصل معك قريبًا.",
"de": "Füllen Sie das Formular aus und wir melden uns in Kürze.",
"fr": "Remplissez le formulaire ci-dessous et nous vous recontacterons rapidement.",
"it": "Compila il modulo qui sotto e ti ricontatteremo presto.",
"pt": "Preencha o formulário abaixo e entraremos em contato em breve.",
"es": "Complete el formulario a continuación y nos pondremos en contacto pronto.",
"ca": "Ompliu el formulari a continuació i us contactarem aviat.",
"tr": "Aşağıdaki formu doldurun, en kısa sürede size geri döneceğiz.",
"uk": "Заповніть форму нижче, і ми зв'яжемося з вами найближчим часом."
"ENTERPRISE$FORM_SAAS_TITLE": {
"en": "Learn more about Enterprise SaaS",
"ja": "Enterprise SaaSについて詳しく",
"zh-CN": "了解更多企业SaaS",
"zh-TW": "了解更多企業SaaS",
"ko-KR": "Enterprise SaaS 자세히 알아보기",
"no": "Lær mer om Enterprise SaaS",
"ar": "تعرف على المزيد حول Enterprise SaaS",
"de": "Erfahren Sie mehr über Enterprise SaaS",
"fr": "En savoir plus sur Enterprise SaaS",
"it": "Scopri di più su Enterprise SaaS",
"pt": "Saiba mais sobre Enterprise SaaS",
"es": "Conozca más sobre Enterprise SaaS",
"ca": "Més informació sobre Enterprise SaaS",
"tr": "Enterprise SaaS hakkında daha fazla bilgi edinin",
"uk": "Дізнайтеся більше про Enterprise SaaS"
},
"ENTERPRISE$FORM_SAAS_SUBTITLE": {
"en": "Tell us about your team and we'll help you get started.",
"ja": "チームについて教えてください。開始をお手伝いします。",
"zh-CN": "告诉我们您的团队情况,我们将帮助您开始使用。",
"zh-TW": "告訴我們您的團隊情況,我們將幫助您開始使用。",
"ko-KR": "팀에 대해 알려주시면 시작을 도와드리겠습니다.",
"no": "Fortell oss om teamet ditt, så hjelper vi deg i gang.",
"ar": "أخبرنا عن فريقك وسنساعدك على البدء.",
"de": "Erzählen Sie uns von Ihrem Team und wir helfen Ihnen beim Einstieg.",
"fr": "Parlez-nous de votre équipe et nous vous aiderons à démarrer.",
"it": "Raccontaci del tuo team e ti aiuteremo a iniziare.",
"pt": "Conte-nos sobre sua equipe e ajudaremos você a começar.",
"es": "Cuéntenos sobre su equipo y le ayudaremos a comenzar.",
"ca": "Expliqueu-nos sobre el vostre equip i us ajudarem a començar.",
"tr": "Bize ekibinizden bahsedin, başlamanıza yardımcı olalım.",
"uk": "Розкажіть нам про свою команду, і ми допоможемо вам почати."
},
"ENTERPRISE$FORM_SELF_HOSTED_TITLE": {
"en": "Learn more about Self-hosted",
"ja": "セルフホストについて詳しく",
"zh-CN": "了解更多自托管",
"zh-TW": "了解更多自託管",
"ko-KR": "셀프 호스팅 자세히 알아보기",
"no": "Lær mer om selvhostet",
"ar": "تعرف على المزيد حول الاستضافة الذاتية",
"de": "Erfahren Sie mehr über Self-hosted",
"fr": "En savoir plus sur l'auto-hébergement",
"it": "Scopri di più su Self-hosted",
"pt": "Saiba mais sobre auto-hospedagem",
"es": "Conozca más sobre auto-alojamiento",
"ca": "Més informació sobre auto-allotjament",
"tr": "Self-hosted hakkında daha fazla bilgi edinin",
"uk": "Дізнайтеся більше про самостійний хостинг"
},
"ENTERPRISE$FORM_SELF_HOSTED_SUBTITLE": {
"en": "Tell us about your needs and we'll be in touch.",
"ja": "ご要望をお聞かせください。ご連絡いたします。",
"zh-CN": "告诉我们您的需求,我们会与您联系。",
"zh-TW": "告訴我們您的需求,我們會與您聯繫。",
"ko-KR": "귀하의 요구 사항을 알려주시면 연락드리겠습니다.",
"no": "Fortell oss om dine behov, så tar vi kontakt.",
"ar": "أخبرنا عن احتياجاتك وسنتواصل معك.",
"de": "Erzählen Sie uns von Ihren Anforderungen und wir melden uns.",
"fr": "Parlez-nous de vos besoins et nous vous contacterons.",
"it": "Raccontaci le tue esigenze e ti contatteremo.",
"pt": "Conte-nos sobre suas necessidades e entraremos em contato.",
"es": "Cuéntenos sobre sus necesidades y nos pondremos en contacto.",
"ca": "Expliqueu-nos les vostres necessitats i us contactarem.",
"tr": "Bize ihtiyaçlarınızı anlatın, sizinle iletişime geçeceğiz.",
"uk": "Розкажіть нам про ваші потреби, і ми зв'яжемося з вами."
},
"ENTERPRISE$FORM_NAME_LABEL": {
"en": "Name",
@@ -20508,123 +20559,140 @@
"uk": "Ім'я"
},
"ENTERPRISE$FORM_NAME_PLACEHOLDER": {
"en": "Enter your name",
"ja": "名前を入力してください",
"zh-CN": "请输入您的姓名",
"zh-TW": "請輸入您的姓名",
"ko-KR": "이름을 입력하세요",
"no": "Skriv inn navnet ditt",
"ar": "أدخل اسمك",
"de": "Geben Sie Ihren Namen ein",
"fr": "Entrez votre nom",
"it": "Inserisci il tuo nome",
"pt": "Digite seu nome",
"es": "Ingrese su nombre",
"ca": "Introduïu el vostre nom",
"tr": "Adınızı girin",
"uk": "Введіть своє ім'я"
"en": "Your name",
"ja": "あなたの名前",
"zh-CN": "您的姓名",
"zh-TW": "您的姓名",
"ko-KR": "이름",
"no": "Ditt navn",
"ar": "اسمك",
"de": "Ihr Name",
"fr": "Votre nom",
"it": "Il tuo nome",
"pt": "Seu nome",
"es": "Su nombre",
"ca": "El vostre nom",
"tr": "Adınız",
"uk": "Ваше ім'я"
},
"ENTERPRISE$FORM_EMAIL_LABEL": {
"en": "Work Email",
"ja": "仕事用メールアドレス",
"zh-CN": "工作邮箱",
"zh-TW": "工作電子郵件",
"ko-KR": "업무용 이메일",
"no": "Jobb-e-post",
"ar": "البريد الإلكتروني للعمل",
"de": "Geschäftliche E-Mail",
"fr": "E-mail professionnel",
"it": "Email di lavoro",
"pt": "E-mail corporativo",
"es": "Correo electrónico de trabajo",
"ca": "Correu electrònic de treball",
"tr": "İş E-postası",
"uk": "Робоча електронна пошта"
"en": "Email address",
"ja": "メールアドレス",
"zh-CN": "电子邮件地址",
"zh-TW": "電子郵件地址",
"ko-KR": "이메일 주소",
"no": "E-postadresse",
"ar": "عنوان البريد الإلكتروني",
"de": "E-Mail-Adresse",
"fr": "Adresse e-mail",
"it": "Indirizzo email",
"pt": "Endereço de e-mail",
"es": "Dirección de correo electrónico",
"ca": "Adreça de correu electrònic",
"tr": "E-posta adresi",
"uk": "Електронна адреса"
},
"ENTERPRISE$FORM_EMAIL_PLACEHOLDER": {
"en": "you@company.com",
"ja": "you@company.com",
"zh-CN": "you@company.com",
"zh-TW": "you@company.com",
"ko-KR": "you@company.com",
"no": "you@company.com",
"ar": "you@company.com",
"de": "you@company.com",
"fr": "vous@entreprise.com",
"it": "tu@azienda.com",
"pt": "voce@empresa.com",
"es": "tu@empresa.com",
"ca": "tu@empresa.com",
"tr": "sen@sirket.com",
"uk": "ви@компанія.com"
"en": "name@company.com",
"ja": "name@company.com",
"zh-CN": "name@company.com",
"zh-TW": "name@company.com",
"ko-KR": "name@company.com",
"no": "name@company.com",
"ar": "name@company.com",
"de": "name@company.com",
"fr": "nom@entreprise.com",
"it": "nome@azienda.com",
"pt": "nome@empresa.com",
"es": "nombre@empresa.com",
"ca": "nom@empresa.com",
"tr": "isim@sirket.com",
"uk": "ім'я@компанія.com"
},
"ENTERPRISE$FORM_COMPANY_LABEL": {
"en": "Company",
"en": "Company name",
"ja": "会社名",
"zh-CN": "公司",
"zh-TW": "公司",
"ko-KR": "회사",
"no": "Selskap",
"ar": "الشركة",
"de": "Unternehmen",
"fr": "Entreprise",
"it": "Azienda",
"pt": "Empresa",
"es": "Empresa",
"ca": "Empresa",
"tr": "Şirket",
"uk": "Компанія"
"zh-CN": "公司名称",
"zh-TW": "公司名稱",
"ko-KR": "회사",
"no": "Selskapsnavn",
"ar": "اسم الشركة",
"de": "Firmenname",
"fr": "Nom de l'entreprise",
"it": "Nome azienda",
"pt": "Nome da empresa",
"es": "Nombre de la empresa",
"ca": "Nom de l'empresa",
"tr": "Şirket adı",
"uk": "Назва компанії"
},
"ENTERPRISE$FORM_COMPANY_PLACEHOLDER": {
"en": "Enter your company name",
"ja": "会社名を入力してください",
"zh-CN": "请输入您的公司名称",
"zh-TW": "請輸入您的公司名稱",
"ko-KR": "회사명을 입력하세요",
"no": "Skriv inn selskapets navn",
"ar": "أدخل اسم شركتك",
"de": "Geben Sie Ihren Firmennamen ein",
"fr": "Entrez le nom de votre entreprise",
"it": "Inserisci il nome della tua azienda",
"pt": "Digite o nome da sua empresa",
"es": "Ingrese el nombre de su empresa",
"ca": "Introduïu el nom de la vostra empresa",
"tr": "Şirket adınızı girin",
"uk": "Введіть назву вашої компанії"
"en": "Your company",
"ja": "あなたの会社",
"zh-CN": "您的公司",
"zh-TW": "您的公司",
"ko-KR": "회사명",
"no": "Ditt selskap",
"ar": "شركتك",
"de": "Ihr Unternehmen",
"fr": "Votre entreprise",
"it": "La tua azienda",
"pt": "Sua empresa",
"es": "Su empresa",
"ca": "La vostra empresa",
"tr": "Şirketiniz",
"uk": "Ваша компанія"
},
"ENTERPRISE$FORM_MESSAGE_LABEL": {
"en": "Message (optional)",
"ja": "メッセージ(任意)",
"zh-CN": "留言(可选)",
"zh-TW": "留言(可選)",
"ko-KR": "메시지 (선택사항)",
"no": "Melding (valgfritt)",
"ar": "الرسالة (اختياري)",
"de": "Nachricht (optional)",
"fr": "Message (facultatif)",
"it": "Messaggio (opzionale)",
"pt": "Mensagem (opcional)",
"es": "Mensaje (opcional)",
"ca": "Missatge (opcional)",
"tr": "Mesaj (isteğe bağlı)",
"uk": "Повідомлення (необов'язково)"
"en": "Custom message",
"ja": "カスタムメッセージ",
"zh-CN": "自定义消息",
"zh-TW": "自訂訊息",
"ko-KR": "맞춤 메시지",
"no": "Tilpasset melding",
"ar": "رسالة مخصصة",
"de": "Benutzerdefinierte Nachricht",
"fr": "Message personnalisé",
"it": "Messaggio personalizzato",
"pt": "Mensagem personalizada",
"es": "Mensaje personalizado",
"ca": "Missatge personalitzat",
"tr": "Özel mesaj",
"uk": "Користувацьке повідомлення"
},
"ENTERPRISE$FORM_MESSAGE_PLACEHOLDER": {
"en": "Tell us about your needs...",
"ja": "ご要望をお聞かせください...",
"zh-CN": "告诉我们您的需求...",
"zh-TW": "告訴我們您的需求...",
"ko-KR": "귀하의 요구 사항을 알려주세요...",
"no": "Fortell oss om dine behov...",
"ar": "أخبرنا عن احتياجاتك...",
"de": "Erzählen Sie uns von Ihren Anforderungen...",
"fr": "Parlez-nous de vos besoins...",
"it": "Raccontaci le tue esigenze...",
"pt": "Conte-nos sobre suas necessidades...",
"es": "Cuéntenos sobre sus necesidades...",
"ca": "Expliqueu-nos les vostres necessitats...",
"tr": "Bize ihtiyaçlarınızı anlatın...",
"uk": "Розкажіть нам про ваші потреби..."
"ENTERPRISE$FORM_MESSAGE_SAAS_PLACEHOLDER": {
"en": "Tell us about your team and use case...",
"ja": "チームと使用目的について教えてください...",
"zh-CN": "告诉我们您的团队和用例...",
"zh-TW": "告訴我們您的團隊和用例...",
"ko-KR": "팀과 사용 사례에 대해 알려주세요...",
"no": "Fortell oss om teamet ditt og brukstilfelle...",
"ar": "أخبرنا عن فريقك وحالة الاستخدام...",
"de": "Erzählen Sie uns von Ihrem Team und Anwendungsfall...",
"fr": "Parlez-nous de votre équipe et cas d'utilisation...",
"it": "Raccontaci del tuo team e caso d'uso...",
"pt": "Conte-nos sobre sua equipe e caso de uso...",
"es": "Cuéntenos sobre su equipo y caso de uso...",
"ca": "Expliqueu-nos sobre el vostre equip i cas d'ús...",
"tr": "Bize ekibiniz ve kullanım durumunuz hakkında bilgi verin...",
"uk": "Розкажіть нам про свою команду та варіант використання..."
},
"ENTERPRISE$FORM_MESSAGE_SELF_HOSTED_PLACEHOLDER": {
"en": "Tell us about your deployment needs...",
"ja": "デプロイメントのニーズについて教えてください...",
"zh-CN": "告诉我们您的部署需求...",
"zh-TW": "告訴我們您的部署需求...",
"ko-KR": "배포 요구 사항에 대해 알려주세요...",
"no": "Fortell oss om dine distribusjonsbehov...",
"ar": "أخبرنا عن احتياجات النشر الخاصة بك...",
"de": "Erzählen Sie uns von Ihren Bereitstellungsanforderungen...",
"fr": "Parlez-nous de vos besoins de déploiement...",
"it": "Raccontaci le tue esigenze di distribuzione...",
"pt": "Conte-nos sobre suas necessidades de implantação...",
"es": "Cuéntenos sobre sus necesidades de implementación...",
"ca": "Expliqueu-nos les vostres necessitats de desplegament...",
"tr": "Bize dağıtım ihtiyaçlarınızı anlatın...",
"uk": "Розкажіть нам про ваші потреби у розгортанні..."
},
"ENTERPRISE$FORM_SUBMIT": {
"en": "Submit",

View File

@@ -0,0 +1,18 @@
<svg width="48" height="48" viewBox="0 0 48 48" fill="none" xmlns="http://www.w3.org/2000/svg">
<!-- Left waving hand -->
<g transform="translate(0, 4)">
<path d="M16 8C16 6.89543 15.1046 6 14 6C12.8954 6 12 6.89543 12 8V20" stroke="white" stroke-width="2" stroke-linecap="round"/>
<path d="M12 12C12 10.8954 11.1046 10 10 10C8.89543 10 8 10.8954 8 12V22" stroke="white" stroke-width="2" stroke-linecap="round"/>
<path d="M8 14C8 12.8954 7.10457 12 6 12C4.89543 12 4 12.8954 4 14V24C4 30.6274 9.37258 36 16 36C20.4183 36 24 32.4183 24 28V20" stroke="white" stroke-width="2" stroke-linecap="round"/>
<path d="M20 10C20 8.89543 19.1046 8 18 8C16.8954 8 16 8.89543 16 10V20" stroke="white" stroke-width="2" stroke-linecap="round"/>
<path d="M24 14C24 12.8954 23.1046 12 22 12C20.8954 12 20 12.8954 20 14V20" stroke="white" stroke-width="2" stroke-linecap="round"/>
</g>
<!-- Right waving hand -->
<g transform="translate(24, 0)">
<path d="M8 8C8 6.89543 8.89543 6 10 6C11.1046 6 12 6.89543 12 8V20" stroke="white" stroke-width="2" stroke-linecap="round"/>
<path d="M12 12C12 10.8954 12.8954 10 14 10C15.1046 10 16 10.8954 16 12V22" stroke="white" stroke-width="2" stroke-linecap="round"/>
<path d="M16 14C16 12.8954 16.8954 12 18 12C19.1046 12 20 12.8954 20 14V24C20 30.6274 14.6274 36 8 36C3.58172 36 0 32.4183 0 28V20" stroke="white" stroke-width="2" stroke-linecap="round"/>
<path d="M4 10C4 8.89543 4.89543 8 6 8C7.10457 8 8 8.89543 8 10V20" stroke="white" stroke-width="2" stroke-linecap="round"/>
<path d="M0 14C0 12.8954 0.895431 12 2 12C3.10457 12 4 12.8954 4 14V20" stroke="white" stroke-width="2" stroke-linecap="round"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

@@ -103,7 +103,6 @@ export default function InformationRequest() {
data-testid="information-request-page"
className="w-full max-w-4xl flex flex-col items-center gap-8 p-6"
>
<OpenHandsLogoWhite width={55} height={55} />
<InformationRequestForm
requestType={selectedRequestType}
onBack={handleFormBack}