Gerçek anlamsal belirteçler, yerel React Aria kontrolleri, koşullu iletişim alanları ve eksiksiz doğrulama davranışıyla B.C. tarzında bir hatırlatma tercih formu oluşturun.
B.C. tasarım sistemi Güncel React Kitaplığı ve Tasarım Belirteçleri
Bakımı sürdürülen uygulamayı seçin
Güncel B.C. Design System, React Aria üzerine kurulu React bileşenler sunar. Bu örnek, react-components 0.8.1 sürümünü ve bunun design-tokens 5.0.0 bağımlılığını sabitler. Eski B.C. Web Components deposu, ayrı bir eski uygulamadır; buradan içe aktarma, güncel React kitaplığını yeniden oluşturmaz. Bir örneği kopyalamadan önce uygulamanın belgelerle eşleştiğini doğrulayın.
Gerçek yazı tipi tanımını içe aktarın
Bileşenler, arada boşluk bulunan BC Sans aile adını bekler. 2.1.2 sürümü css/BC_Sans.css dosyasını sunar; eski BCSans.css girdisi kullanımdan kaldırılmış olarak işaretlenmiştir ve farklı bir aile adı tanımlar. Geliştirici makinesinde BC Sans yüklüyse yazı tipi içe aktarmasının eksik olması fark edilmeyebilir. Örnekte yayımlanmış yazı tipi pakete eklenmiştir; böylece sonuç yerel yüklemeye bağlı olmaz.
B.C. tasarım sistemi Anlamsal Renk ve Boşluk Rolleri
Değeri seçmeden önce rolü okuyun
Birincil düğmelerde koyu mavi birincil düğme dolgusu, yardımcı içerikte ise typography-color-secondary kullanılır. Hata mesajlarında typography-color-danger kullanılır. Tabloda güncel CSS dışa aktarma adları yer alır; gelecekteki bir tema temel değeri değiştirse bile ad, değişmeyen bir amacı ifade eder. Etkin olmayan bir kontrolün rengini sıradan yardımcı metin rengiyle karıştırmayın.
Yerleşimi bilinçli biçimde oluşturun
Formda alanlar arasında 24px, ana görev ile yardımcı açıklama arasında ise daha geniş, 48px’lik bir boşluk kullanılır. Bu değerler kitaplığın ritmiyle uyumludur; ancak genel iki sütunlu düzen bu örnek için özel olarak hazırlanmıştır. Mobil düzende sütunlar daraltılır; form etiketleri küçültülmez ve açıklama metinleri araç ipucuna dönüştürülmez.
B.C. tasarım sistemi Koşullu Alanlar ve Korunan Değerler
Yalnızca seçilen iletişim yöntemini doğrulayın
Yerel bir RadioGroup, E-posta adresi veya Telefon numarası TextField alanlarından hangisinin görüneceğini belirler. İletişim yöntemi değiştiğinde her iki değer de React durumunda tutulur; ancak gözden geçirme doğrulamasına yalnızca seçilen alan katılır. Böylece yararlı girdiler korunurken görünmeyen bir alanın geçerli görevi engellemesi önlenir.
Anlaşılır yerel hatalar gösterin
E-posta alanı basit bir adres biçimini denetler; telefon örneği ise en az on rakam gerektirir. Bunlar, uluslararası iletişim bilgilerini kapsamlı biçimde doğrulamayan örnek kurallardır. Gözden geçirme sırasında geçersiz alanlar için isInvalid ayarlanır ve alana özgü bir errorMessage sağlanır. Onay eksikse görünür bir mesaj gösterilir; odağı ilk geçersiz kontrol alır.
B.C. tasarım sistemi React Aria Bileşen Sözleşmeleri
Kontrollü değerleri ve belgelenmiş işleyicileri kullanın
TextField, value ve onChange alır; RadioGroup, value ve onChange alır; Checkbox ise isSelected ve onChange kullanır. Bu işleyicilere, her zaman event.target üzerinden okunması gereken bir tarayıcı olay nesnesi değil, belgelenmiş değerler iletilir. Button, klavyeyle gönderimin de aynı doğrulama yolunu kullanması için type=submit ve yerel formun submit olayını kullanır.
Gözden geçirme geri bildirimini eşzamanlı tutun
B.C. tasarım sistemi Erişilebilir Adlar ve Duyarlı Düzen
Etiketleri, açıklamaları ve hataları birbirine bağlayın
Yerel bileşenler, etiketler, yardım metinleri ve hata mesajları için kendi React Aria ilişkilerini sağlar. Yine de uygulamanın anlamlı etiketler, açık bir grup açıklaması ve anlaşılır doğrulama metinleri sunması gerekir. Testlerde görünür radyo etiketlerine tıklayın ve klavyeyi kullanın; görsel olarak gizlenmiş dahili girdi, görünür hedef değildir.
Yardımcı açıklamayı formdan ayrı tutun
Yandaki bilgi kutusu yerel iş akışını açıklar ve uygulama bağlamını içeren yerel bir details açılır alanı sunar. Dar ekranlarda okuma sıralamasında formun ardından gelir. Bilgi simgesi dekoratiftir; anlamı başlık taşır. Bileşenleri incelemek için resmî bir B.C. logosu veya devlet hizmeti iddiası gerekmez.
B.C. tasarım sistemi Eksiksiz React Uygulaması
Doğrulanmış kaynağı yeniden oluşturun
Bir Vite React projesi oluşturun ve sabitlenmiş bileşen, belirteç ve yazı tipi paketlerini yükleyin. Sağlanan main.jsx ve bc.css dosyalarını, kök bağlama öğesiyle birlikte kullanın. Paket; yerel radyo düğmesi, alan, onay kutusu ve düğme davranışlarının yanı sıra eksiksiz yerel doğrulama ve durum geçişlerini içerir. Özel bir API veya kimlik bilgisi gerekmez.
Sabitlenmiş paketleri yükleyin ve css/BC_Sans.css dosyasını içe aktarın.
main.jsx ve bc.css dosyalarını, kök bağlama öğesini koruyarak kaydedin.
Boş bir form gönderin, ardından görünür alanı düzeltin.
Yöntemleri değiştirin ve önceki değerin korunduğunu doğrulayın.
Koşullu doğrulamayı seçilen yöntemle uyumlu tutun
RadioGroup ve TextField onChange işleyicilerine değerler, Checkbox onChange işleyicisine ise seçili durumun boolean değeri iletilir. Her bileşene genel bir event.target.value işleyicisi uygulamak yerine bu değerleri doğrudan saklayın. React Aria yerel bir girdiyi görsel olarak gizlese bile etkileşim hedefleri görünür etiketler olarak kalır.
İletişim yöntemi değiştiğinde her iki taslak değeri de koruyun, ancak eski gözden geçirme sonucunu temizleyin ve yalnızca seçilen yöntemi doğrulayın. Gönderimden sonra odağı görünür ilk geçersiz kontrole taşıyın. Böylece kişi, e-posta adresini kaybetmeden iletişim seçeneklerini karşılaştırabilir ve görünmeyen bir telefon alanı tarafından engellenmez. Örnekteki on rakamlı telefon kuralı bilerek yerel tutulmuştur; hizmetin gerçek uluslararası numara gereksinimleriyle değiştirilmelidir.
Yalnızca seçilen iletişim alanı doğrulanır.
Herhangi bir seçim düzenlendiğinde eski gözden geçirme geri bildirimi temizlenir.
Sonuç, bir hatırlatıcının zamanlandığını iddia etmez.
B.C. tasarım sistemi Bileşen Örnekleri
main.jsx — eksiksiz çalışan örnek
Bir iletişim tercihi seçip gözden geçirin. Aşağıdaki kaynak, tüm durum ve doğrulama mantığı dâhil olmak üzere eksiksiz React girişidir.
jsx
import React, { useState, useRef } from "react";
import { createRoot } from "react-dom/client";
import {
Button,
Radio,
RadioGroup,
TextField,
Checkbox,
} from "@bcgov/design-system-react-components";
import "@bcgov/bc-sans/css/BC_Sans.css";
import "./bc.css";
function App() {
const [method, setMethod] = useState("email"),
[email, setEmail] = useState(""),
[phone, setPhone] = useState(""),
[consent, setConsent] = useState(false),
[submitted, setSubmitted] = useState(false),
[result, setResult] = useState("");
const panel = useRef(null);
const invalidEmail = !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email),
invalidPhone = phone.replace(/\D/g, "").length < 10;
function change(fn, value) {
fn(value);
setResult("");
setSubmitted(false);
}
function review(e) {
e.preventDefault();
setSubmitted(true);
if ((method === "email" ? invalidEmail : invalidPhone) || !consent) {
requestAnimationFrame(() =>
panel.current
.querySelector(
'[aria-invalid="true"] input,input[aria-invalid="true"],input[type=checkbox]:not(:checked)',
)
?.focus(),
);
return;
}
setResult(
`Local preference ready: ${method === "email" ? "Email to " + email : "Phone call to " + phone}. No reminder has been scheduled.`,
);
}
return (
<main>
<header>
<div className="eyebrow">
SERVICE REMINDER / ORIGINAL APPLICATION STUDY
</div>
<h1>Choose how to hear from us</h1>
<p>
Set a sample reminder preference. Use fictional contact details in
this local example.
</p>
</header>
<div className="columns">
<form onSubmit={review} noValidate ref={panel}>
<RadioGroup
label="Contact method"
value={method}
onChange={(v) => change(setMethod, v)}
description="Choose one way to receive a reminder."
>
<Radio value="email">Email</Radio>
<Radio value="phone">Phone call</Radio>
</RadioGroup>
<div className="field">
{method === "email" ? (
<TextField
label="Email address"
type="email"
value={email}
onChange={(v) => change(setEmail, v)}
isRequired
isInvalid={submitted && invalidEmail}
errorMessage="Enter an email address in the format [email protected]."
description="Use a sample address, such as [email protected]."
/>
) : (
<TextField
label="Phone number"
type="tel"
value={phone}
onChange={(v) => change(setPhone, v)}
isRequired
isInvalid={submitted && invalidPhone}
errorMessage="Enter a phone number with at least 10 digits."
description="Sample validation only; a real service needs a jurisdiction-aware phone rule."
/>
)}
</div>
<div className="field">
<Checkbox
isSelected={consent}
onChange={(v) => change(setConsent, v)}
isInvalid={submitted && !consent}
>
I agree to use these details for this sample reminder
</Checkbox>
{submitted && !consent && (
<p className="error" role="alert">
Confirm the reminder preference before continuing.
</p>
)}
</div>
<Button type="submit" variant="primary">
Review preference
</Button>
<p className="result" role="status">
{result}
</p>
</form>
<aside>
<div className="status-mark" aria-hidden="true">
i
</div>
<h2>What happens next</h2>
<ol>
<li>Choose a contact method.</li>
<li>Review the sample details.</li>
<li>Connect a real notification service before scheduling.</li>
</ol>
<p>
This example keeps both fields while switching methods, but only
reviews the selected method.
</p>
<details>
<summary>About this specimen</summary>
<p>
Native B.C. React Aria components with BC Sans. The form is
original and is not an official government service.
</p>
</details>
</aside>
</div>
</main>
);
}
createRoot(document.getElementById("root")).render(<App />);
main.jsx dosyasının yanına kaydedin. Bu özel düzen kuralları, kitaplığın belirteç başvurusundan ayrı tutulmuştur.
04
B.C. tasarım sistemi Ajan Kurulumu
Uygulamaya Başlangıç Noktası
Sabitlenmiş yerel örnek pakete alındı ve tarayıcıda yerel olarak kontrol edildi. Örnek yalnızca yerel uygulama durumunu kullanır.
sh
npm create vite@latest bc-reminder -- --template react
cd bc-reminder
npm install
npm install @bcgov/[email protected] @bcgov/[email protected] @bcgov/[email protected]
# Replace src/main.jsx and add src/bc.css using the complete examples.
npm run dev
Projeniz İçin Bir İstem
Ajan İstemi
Hatırlatma formunu B.C. React bileşenleri 0.8.1 ve BC Sans 2.1.2 ile oluşturun. Koşullu doğrulamayı, korunan girdileri, görünür hataları ve eski sonuçların temizlenmesini koruyun. Güncel belirteç adlarını ve boşluk içeren doğru yazı tipi ailesi adını kullanın. Gerçek bir bildirim sözleşmesi oluşturulana kadar örneği yerel tutun.
05
B.C. tasarım sistemi Kaynaklar ve Kapsam
Güncel herkese açık B.C. React kitaplığını inceleyen bir OpenDesign uygulama çalışmasıdır. Bu, özgün ve yerel bir formdur; resmî bir devlet hizmeti değildir. Kurmaca iletişim bilgileri kullanın.