Kamu Yönetimi ve Kamu Hizmetleri · Yeni Kaynak

B.C. tasarım sistemi.

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.

OpenDesign Kılavuzu6 Bölüm36 Başvuru MaddesiÖzgün Uygulama Kılavuzu
01

B.C. tasarım sistemi Arayüz Önizlemesi

Girişi koruyarak e-posta ve telefon arasında geçiş yapın; ardından yerel tercihi doğrulayıp inceleyin.

Bir iletişim tercihi seçin ve inceleyinÖrneğin Tamamını Aç
Yerel @bcgov/design-system-react-components 0.8.1, tokens 5.0.0 ve BC Sans 2.1.2. · Uygulama başvurusu
02

B.C. tasarım sistemi Tasarım Başvurusu

Yerel @bcgov/design-system-react-components 0.8.1, tokens 5.0.0 ve BC Sans 2.1.2.

Yüzey ve metin rolleri

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
--surface-color-primary-button-default#013366 Yayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--surface-color-primary-button-hover#1e5189 Yayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--surface-color-primary-button-disabled#edebe9 Yayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--surface-color-background-white#ffffff Yayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--surface-color-background-light-gray#faf9f8 Yayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--surface-color-background-light-blue#f1f8fe Yayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--surface-color-border-default#d8d8d8 Yayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--surface-color-border-medium#898785 Yayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--surface-color-border-active#2e5dd7 Yayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--typography-color-primary#2d2d2d Yayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--typography-color-secondary#474543 Yayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--typography-color-link#255a90 Yayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--typography-color-danger#ce3e39 Yayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--typography-color-primary-invert#ffffff Yayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.

Düzen ritmi

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
--layout-padding-hair0.125remYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--layout-padding-xsmall0.25remYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--layout-padding-small0.5remYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--layout-padding-medium1remYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--layout-padding-large1.5remYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--layout-padding-xlarge2remYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--layout-margin-medium1remYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--layout-margin-large1.5remYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--layout-margin-xlarge2remYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--layout-margin-xxxlarge3remYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--layout-border-radius-small2pxYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--layout-border-radius-medium4pxYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--layout-border-radius-large6pxYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.

Yazı tipi ölçeği

Kaynak
Ad / KuralDeğer / YapılandırmaKullanım
--typography-font-size-small-body0.875remYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--typography-font-size-body1remYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--typography-font-size-large-body1.125remYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--typography-font-size-h51.25remYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--typography-font-size-h41.5remYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--typography-font-size-h31.75remYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--typography-font-size-h22remYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--typography-font-size-h12.25remYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
--typography-font-size-display3remYayımlanmış B.C. rolü; ham bir renk veya boyutla değiştirmek yerine kullanım amacına göre kullanın.
03

B.C. tasarım sistemi Eksiksiz Kılavuz

Bu sistemi gerçek bir arayüz için seçmeye, uygulamaya ve gözden geçirmeye yönelik pratik bir kılavuz.

DESIGN-british-columbia.md

Eksiksiz yönlendirme, uygulama için başlangıç noktası ve kaynak bağlantıları.

Kılavuzu İndir

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.

Bu OpenDesign kılavuzundan

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.

  1. Sabitlenmiş paketleri yükleyin ve css/BC_Sans.css dosyasını içe aktarın.
  2. main.jsx ve bc.css dosyalarını, kök bağlama öğesini koruyarak kaydedin.
  3. Boş bir form gönderin, ardından görünür alanı düzeltin.
  4. 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 />);

Kod referansı

  • Bir Vite React projesi oluşturun, <div id="root"></div> öğesini koruyun ve bunu src/main.jsx dosyası olarak yükleyin.

bc.css — özgün duyarlı düzen

Yerel bileşenlerin üzerine katmanlanan uygulama düzeni.

css
* {
  box-sizing: border-box;
}
body {
  margin: 0;
  font:
    16px/1.5 "BC Sans",
    sans-serif;
  color: var(--typography-color-primary, #2d2d2d);
  background: white;
}
main {
  padding: 32px;
}
header {
  border-top: 6px solid #fcba19;
  border-bottom: 1px solid #d8d8d8;
  padding: 24px 0;
  margin-bottom: 32px;
}
.eyebrow {
  font-size: 13px;
  color: #474543;
}
h1 {
  font-size: 32px;
  line-height: 1.25;
  margin: 8px 0 16px;
}
h2 {
  font-size: 24px;
  margin: 0 0 16px;
}
p {
  margin: 8px 0 16px;
}
.columns {
  display: grid;
  grid-template-columns: 1.4fr 1fr;
  gap: 48px;
}
form {
  max-width: 620px;
}
.field {
  margin: 24px 0;
}
aside {
  padding: 24px;
  background: #f1f8fe;
  border-left: 4px solid #1a5a96;
  align-self: start;
}
.status-mark {
  background: #1a5a96;
  color: white;
  border-radius: 50%;
  width: 32px;
  height: 32px;
  display: grid;
  place-items: center;
  font-weight: bold;
  margin-bottom: 16px;
}
ol {
  padding-left: 24px;
}
li {
  padding-left: 4px;
  margin: 12px 0;
}
.error {
  color: #ce3e39;
  font-size: 14px;
}
.result {
  margin-top: 24px;
  color: #24613b;
}
summary {
  cursor: pointer;
  text-decoration: underline;
  color: #1a5a96;
}
details {
  margin-top: 24px;
}
details p {
  font-size: 14px;
}
@media (max-width: 767px) {
  main {
    padding: 16px;
  }
  .columns {
    grid-template-columns: 1fr;
    gap: 24px;
  }
  h1 {
    font-size: 28px;
  }
  aside {
    padding: 16px;
  }
}

Kod referansı

  • 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.