Progettazione di prodotti aziendali · Nuova risorsa

Sistema di design Orange OUDS Web.

Esamina i token semantici effettivi, i pacchetti tema e il comportamento nativo di Offcanvas di Orange OUDS 1.4 attraverso uno studio comparativo completo e responsive.

Guida OpenDesign7 capitoli37 voci di riferimentoGuida applicativa originale
01

Anteprima dell’interfaccia del sistema di design Orange OUDS Web

Esamina ogni pannello nativo, conserva una scelta locale e cambia l’aspetto.

Confronta pacchetti di dati fittiziApri l’esempio completo
OUDS Web 1.4.0 Native CSS e Offcanvas JavaScript, contenuti originali e stato di selezione. · Riferimento per l’implementazione
02

Riferimento di progettazione del sistema di design Orange OUDS Web

Sorgente di @ouds/web-orange e @ouds/web-common 1.4.0 bloccata a una versione specifica, con le scelte di layout originali indicate separatamente.

Ruoli semantici dei colori chiari

Fonte
Nome / regolaValore / configurazioneUtilizzo
--bs-color-action-enabled#000Le prime dichiarazioni, per l’aspetto chiaro, del preset Orange 1.4. L’aspetto scuro risolve i propri valori tramite data-bs-theme, anziché riutilizzare questa tabella come insieme di colori letterali.
--bs-color-action-selected#f15e00 Le prime dichiarazioni, per l’aspetto chiaro, del preset Orange 1.4. L’aspetto scuro risolve i propri valori tramite data-bs-theme, anziché riutilizzare questa tabella come insieme di colori letterali.
--bs-color-action-hoverrgba(0, 0, 0, 0.68)Le prime dichiarazioni, per l’aspetto chiaro, del preset Orange 1.4. L’aspetto scuro risolve i propri valori tramite data-bs-theme, anziché riutilizzare questa tabella come insieme di colori letterali.
--bs-color-action-pressed#f15e00 Le prime dichiarazioni, per l’aspetto chiaro, del preset Orange 1.4. L’aspetto scuro risolve i propri valori tramite data-bs-theme, anziché riutilizzare questa tabella come insieme di colori letterali.
--bs-color-bg-primary#fffLe prime dichiarazioni, per l’aspetto chiaro, del preset Orange 1.4. L’aspetto scuro risolve i propri valori tramite data-bs-theme, anziché riutilizzare questa tabella come insieme di colori letterali.
--bs-color-bg-secondary#f4f4f4 Le prime dichiarazioni, per l’aspetto chiaro, del preset Orange 1.4. L’aspetto scuro risolve i propri valori tramite data-bs-theme, anziché riutilizzare questa tabella come insieme di colori letterali.
--bs-color-border-defaultrgba(0, 0, 0, 0.2)Le prime dichiarazioni, per l’aspetto chiaro, del preset Orange 1.4. L’aspetto scuro risolve i propri valori tramite data-bs-theme, anziché riutilizzare questa tabella come insieme di colori letterali.
--bs-color-always-black#000Le prime dichiarazioni, per l’aspetto chiaro, del preset Orange 1.4. L’aspetto scuro risolve i propri valori tramite data-bs-theme, anziché riutilizzare questa tabella come insieme di colori letterali.
--bs-color-always-white#fffLe prime dichiarazioni, per l’aspetto chiaro, del preset Orange 1.4. L’aspetto scuro risolve i propri valori tramite data-bs-theme, anziché riutilizzare questa tabella come insieme di colori letterali.

Scala degli spazi

Fonte
Nome / regolaValore / configurazioneUtilizzo
--bs-space-scaled-none0pxScala degli spazi effettivamente esportata. La composizione originale delle schede di confronto sceglie spaziature di 24px usando questi valori.
--bs-space-scaled-3xsmall2pxScala degli spazi effettivamente esportata. La composizione originale delle schede di confronto sceglie spaziature di 24px usando questi valori.
--bs-space-scaled-2xsmall4pxScala degli spazi effettivamente esportata. La composizione originale delle schede di confronto sceglie spaziature di 24px usando questi valori.
--bs-space-scaled-xsmall8pxScala degli spazi effettivamente esportata. La composizione originale delle schede di confronto sceglie spaziature di 24px usando questi valori.
--bs-space-scaled-small12pxScala degli spazi effettivamente esportata. La composizione originale delle schede di confronto sceglie spaziature di 24px usando questi valori.
--bs-space-scaled-medium16pxScala degli spazi effettivamente esportata. La composizione originale delle schede di confronto sceglie spaziature di 24px usando questi valori.
--bs-space-scaled-large24pxScala degli spazi effettivamente esportata. La composizione originale delle schede di confronto sceglie spaziature di 24px usando questi valori.
--bs-space-scaled-xlarge32pxScala degli spazi effettivamente esportata. La composizione originale delle schede di confronto sceglie spaziature di 24px usando questi valori.
--bs-space-scaled-2xlarge40pxScala degli spazi effettivamente esportata. La composizione originale delle schede di confronto sceglie spaziature di 24px usando questi valori.
--bs-space-scaled-3xlarge48pxScala degli spazi effettivamente esportata. La composizione originale delle schede di confronto sceglie spaziature di 24px usando questi valori.

Ruoli tipografici

Fonte
Nome / regolaValore / configurazioneUtilizzo
--bs-font-sans-serif"HelvNeueOrange", "Helvetica Neue", Helvetica, "SF Pro", Roboto, Arial, "Noto Sans", "Liberation Sans", sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"Dichiarazioni pubblicate per font e tipografia. Lo studio incorporato usa il fallback esplicito Arial, non i file del font HelvNeueOrange con marchio.
--bs-font-size-display-large2.5remDichiarazioni pubblicate per font e tipografia. Lo studio incorporato usa il fallback esplicito Arial, non i file del font HelvNeueOrange con marchio.
--bs-font-size-heading-large1.5remDichiarazioni pubblicate per font e tipografia. Lo studio incorporato usa il fallback esplicito Arial, non i file del font HelvNeueOrange con marchio.
--bs-font-size-body-large1remDichiarazioni pubblicate per font e tipografia. Lo studio incorporato usa il fallback esplicito Arial, non i file del font HelvNeueOrange con marchio.
--bs-font-size-body-medium0.875remDichiarazioni pubblicate per font e tipografia. Lo studio incorporato usa il fallback esplicito Arial, non i file del font HelvNeueOrange con marchio.
--bs-font-size-body-small0.75remDichiarazioni pubblicate per font e tipografia. Lo studio incorporato usa il fallback esplicito Arial, non i file del font HelvNeueOrange con marchio.
--bs-font-line-height-body-large1.5Dichiarazioni pubblicate per font e tipografia. Lo studio incorporato usa il fallback esplicito Arial, non i file del font HelvNeueOrange con marchio.
--bs-font-line-height-body-medium1.4285714286Dichiarazioni pubblicate per font e tipografia. Lo studio incorporato usa il fallback esplicito Arial, non i file del font HelvNeueOrange con marchio.

Valori predefiniti di Offcanvas

Fonte
Nome / regolaValore / configurazioneUtilizzo
--bs-offcanvas-zindex1045Valori predefiniti del componente nativo. Il pannello originale imposta la larghezza a 440px, mentre la regola max-width nativa lo mantiene entro i limiti della finestra.
--bs-offcanvas-width400pxValori predefiniti del componente nativo. Il pannello originale imposta la larghezza a 440px, mentre la regola max-width nativa lo mantiene entro i limiti della finestra.
--bs-offcanvas-height30vhValori predefiniti del componente nativo. Il pannello originale imposta la larghezza a 440px, mentre la regola max-width nativa lo mantiene entro i limiti della finestra.
--bs-offcanvas-transitiontransform 0.3s ease-in-outValori predefiniti del componente nativo. Il pannello originale imposta la larghezza a 440px, mentre la regola max-width nativa lo mantiene entro i limiti della finestra.

Contratti nativi per pannelli e pulsanti

Fonte
Nome / regolaValore / configurazioneUtilizzo
Brand action.btn.btn-brandLa variante Orange effettiva; non dare per scontato che .btn-primary di Bootstrap a monte abbia lo stesso significato.
Default action.btn.btn-defaultL’effettivo stile secondario/predefinito usato per cambiare aspetto e cancellare la scelta locale.
Open triggerdata-bs-toggle="offcanvas" / data-bs-targetGli attributi data API nativi aprono il pannello condiviso da ciascun pulsante dei piani originali.
Content eventshow.bs.offcanvas / event.relatedTargetLeggi il piano selezionato dal trigger prima di visualizzare il contenuto del pannello.
Close APIoudsWeb.Offcanvas.getInstance(element).hide()Chiudi l’istanza nativa esistente dopo una scelta locale.
Themedata-bs-theme="light" or "dark"Modifica le variabili effettive del tema senza ricreare lo stato del confronto.
03

Guida completa al sistema di design Orange OUDS Web

Una guida pratica per scegliere, applicare e valutare questo sistema in un’interfaccia reale.

DESIGN-orange-ouds.md

Indicazioni complete, un punto di partenza per l’implementazione e link alle fonti.

Scarica la guida

Pacchetti e struttura dei temi di Orange OUDS nel sistema di design Orange OUDS Web

Installa insieme i pacchetti common e Orange

OUDS Web 1.4.0 separa il comportamento condiviso dal tema con marchio. L’esempio installa @ouds/web-common e @ouds/web-orange alla stessa versione. Il pacchetto Orange fornisce CSS compilato, mentre il pacchetto common fornisce il browser JavaScript incluso. Il documento principale importa entrambi i percorsi espliciti, così la guida non lascia il lettore con un comando per il pacchetto e una pagina statica priva di stile.

Da questa guida su OpenDesign
  • @ouds/web-orange fornisce il tema Orange CSS.
  • @ouds/web-common fornisce JavaScript condiviso.
  • In questo esempio entrambi i pacchetti sono bloccati alla versione 1.4.0.

Considera OUDS come un contratto di componenti a sé

OUDS si basa su Bootstrap, ma questa derivazione non rende ogni classe a monte un sostituto diretto. Questa versione usa btn-brand, btn-default e altre varianti denominate. Il confronto fornito usa queste classi effettive e gli attributi data nativi di Offcanvas. Per una migrazione occorre confrontare sia il markup sia i valori del tema, invece di limitarsi a cambiare l’URL di un foglio di stile.

Ruoli semantici di colore e tipografia di Orange OUDS nel sistema di design Orange OUDS Web

Usa le variabili semantiche installate

Le schede originali usano color-bg-primary e color-border-default. L’accento stretto dell’intestazione segue color-action-selected, che nelle dichiarazioni per l’aspetto chiaro corrisponde a #f15e00. Il tema scuro modifica questi ruoli tramite data-bs-theme sull’elemento radice. La guida riporta quindi i valori chiari con il relativo ambito e lascia che sia il runtime a selezionare l’aspetto corretto, anziché presentare un singolo codice esadecimale arancione come se rappresentasse l’intero sistema di design.

Specifica chiaramente la tipografia

Il pacchetto inserisce HelvNeueOrange all’inizio della propria pila di font. Questo studio incorporato localmente rimuove le dichiarazioni font-face inutilizzate e usa Arial come fallback esplicito. La tabella illustra comunque la famiglia effettiva pubblicata e i ruoli tipografici del testo. Il caricamento di CSS dei componenti non dimostra che il carattere tipografico con marchio sia stato caricato; un progetto che adotta quel font deve gestirne esplicitamente le risorse.

Schede di confronto e contenuti di Orange OUDS nel sistema di design Orange OUDS Web

Dai al confronto una struttura decisionale concreta

Le tre schede mostrano quantità di dati fittizie, una breve descrizione dell’utilizzo e un’azione per esaminare i dettagli. Ogni scheda contiene testo completo, non uno screenshot di righe segnaposto. Sono contenuti originali per lo studio, non prodotti, prezzi o contratti Orange attuali. Escludere i prezzi da questo esercizio di progettazione evita anche di suggerire che si tratti di un’offerta acquistabile o di un flusso di pagamento.

Mantieni coerente l’allineamento delle schede ripetute

La composizione desktop usa tre colonne di griglia uguali e schede con layout flex a colonna, così le azioni di esame dei dettagli si allineano in basso. A 720px passa a una sola colonna con altezza naturale. Le classi native dei pulsanti forniscono gli stati effettivi delle azioni; la griglia circostante, la spaziatura interna di 24px e l’ordine dei contenuti sono scelte originali dell’applicazione visibili nel CSS fornito.

Composizione nativa Offcanvas di Orange OUDS nel sistema di design Orange OUDS Web

Popola il pannello a partire dal relativo trigger

Ogni pulsante per esaminare i dettagli punta allo stesso Offcanvas #details e contiene un piccolo indice data-plan. L’evento show.bs.offcanvas espone relatedTarget, che seleziona il titolo, la descrizione e l’elenco di caratteristiche originali corrispondenti prima di mostrare il pannello. L’elenco viene creato con textContent ed elementi di lista reali, mantenendo i dati separati dal markup. Il titolo del pannello è associato tramite aria-labelledby.

Lascia al runtime nativo la gestione dell’apertura e della chiusura

Scelta locale e ripristino in Orange OUDS nel sistema di design Orange OUDS Web

Descrivi l’azione realmente eseguita

Questa scelta locale memorizza solo il piano fittizio selezionato e mostra la selezione sotto le schede. Il messaggio specifica chiaramente che non è stato effettuato alcun ordine. Una nuova scelta sostituisce quella precedente; cancellandola, il messaggio scompare e il focus torna al primo pulsante per esaminare i dettagli. Non viene inviato nulla a un account, a un carrello o a un servizio di pagamento.

Mantieni l’aspetto distinto dalla selezione

L’azione per passare dall’aspetto chiaro a quello scuro, o viceversa, modifica l’attributo del tema sull’elemento radice e l’etichetta della propria azione. Conserva la scelta locale attuale e i contenuti delle tre schede. È una distinzione utile quando si testa un tema: una modifica visiva non dovrebbe reimpostare silenziosamente il confronto in corso dell’utente. Lo studio usa CSS nativo in entrambi gli aspetti; solo la composizione esterna è fornita dall’applicazione.

Comportamento da tastiera e su schermi stretti di Orange OUDS nel sistema di design Orange OUDS Web

Assegna un nome alle azioni di chiusura e di esame

Ogni azione delle schede include il nome del piano e il pulsante nativo di chiusura, composto dalla sola icona, ha l’etichetta accessibile esplicita «Chiudi i dettagli». Il pannello ha tabindex e un titolo etichettato, per consentire la gestione del focus tramite l’implementazione nativa. I test aprono il pannello Explore, lo chiudono con Escape e verificano che il focus torni al trigger prima di passare a un’altra scheda.

Mantieni il pannello entro i limiti effettivi della finestra

L’applicazione imposta la larghezza del pannello a 440px, ma la regola max-width nativa di Offcanvas lo mantiene entro i limiti di una finestra stretta. Le schede si dispongono in colonna e la spaziatura esterna si riduce sugli schermi piccoli. L’esempio è stato verificato a larghezze di 280px, 390px, tablet e desktop dopo aver selezionato un piano e cambiato l’aspetto, non solo nello stato iniziale.

Integrazione statica completa di Orange OUDS nel sistema di design Orange OUDS Web

Usa l’esempio completo composto da tre file

Salva orange-index.html come index.html e tieni orange.css e orange-app.js nella stessa cartella. Installa i due pacchetti con versione bloccata e avvia il server nella directory. HTML include entrambi i percorsi degli asset nativi, tutti i contenuti delle schede, la struttura del drawer e lo script dell’applicazione. Non serve alcun wrapper React, scaffold mancante o SDK inventato per riprodurre questa composizione nel browser.

  1. Salva insieme tutti e tre i file forniti.
  2. Installa entrambi i pacchetti OUDS corrispondenti.
  3. Avvia il server nella cartella e controlla ogni scheda.
  4. Verifica Escape, il ripristino del focus, la cancellazione locale e entrambe le modalità di visualizzazione.

Mantieni codice e asset sulla stessa release

Se cambi versione, verifica insieme le varianti dei pulsanti, il namespace dei dati API, i nomi degli eventi e le variabili del tema. CSS di una release e script di un’altra possono sembrare corretti finché un’interazione non rivela l’incompatibilità. La versione fornita è un riferimento concreto e testato, non la garanzia che qualsiasi combinazione futura di pacchetti si comporti allo stesso modo.

Orange OUDS Web Esempi di componenti del sistema di design

orange-index.html

Markup completo e importazioni native di CSS/JavaScript.

html
<!doctype html><html lang="en" data-bs-theme="light"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Bundle comparison study</title><link rel="stylesheet" href="./node_modules/@ouds/web-orange/dist/css/ouds-web.min.css"><link rel="stylesheet" href="./orange.css"></head><body><main><header><div><p>OUDS WEB / ORIGINAL COMPARISON STUDY</p><h1>Choose room for your day</h1><p class="scope">Three fictional mobile-data bundles for inspecting Orange-themed cards, buttons and a native detail drawer. These are not commercial offers.</p></div><button id="theme" class="btn btn-default" type="button">Use dark appearance</button></header><div class="plans"><article class="plan"><h2>Everyday</h2><p class="amount">8 GB</p><p>For messages, maps and occasional listening.</p><button class="btn btn-brand" data-plan="0" data-bs-toggle="offcanvas" data-bs-target="#details" aria-controls="details">Inspect Everyday</button></article><article class="plan"><h2>Explore</h2><p class="amount">25 GB</p><p>More room for podcasts and a longer journey.</p><button class="btn btn-brand" data-plan="1" data-bs-toggle="offcanvas" data-bs-target="#details" aria-controls="details">Inspect Explore</button></article><article class="plan"><h2>Create</h2><p class="amount">60 GB</p><p>A larger sample allowance for sharing on the move.</p><button class="btn btn-brand" data-plan="2" data-bs-toggle="offcanvas" data-bs-target="#details" aria-controls="details">Inspect Create</button></article></div><section id="selected" hidden><p role="status" id="selection-message"></p><button id="clear" class="btn btn-default">Clear local choice</button></section><p class="fine">OUDS Web 1.4.0 native CSS and Offcanvas runtime; original sample content and local selection. Arial fallback is used instead of Orange’s branded typeface.</p></main><aside class="offcanvas offcanvas-end" tabindex="-1" id="details" aria-labelledby="drawer-title"><div class="offcanvas-header"><h2 class="offcanvas-title" id="drawer-title">Bundle details</h2><button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close details"></button></div><div class="offcanvas-body"><p id="drawer-description"></p><ul id="features"></ul><p>No account is connected. Keeping a choice changes this preview only.</p><button id="choose" class="btn btn-brand">Keep this local choice</button></div></aside><script src="./node_modules/@ouds/web-common/dist/js/ouds-web.bundle.min.js"></script><script src="./orange-app.js"></script></body></html>

Riferimento del codice

  • Salva orange-index.html come index.html e lascia invariati i nomi degli altri due file.

orange.css

Disposizione originale e responsiva delle schede, con fallback del font esplicito.

css
*{box-sizing:border-box}body{margin:0;font-family:Arial,sans-serif}main{max-width:1080px;margin:auto;padding:32px}header{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;flex-wrap:wrap;border-bottom:4px solid var(--bs-color-action-selected);padding-bottom:24px}h1{font-size:36px;line-height:1.15;margin:12px 0}.scope{font-size:14px;line-height:1.6;max-width:75ch}.plans{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px;margin-top:32px}.plan{display:flex;flex-direction:column;border:1px solid var(--bs-color-border-default);padding:24px;background:var(--bs-color-bg-primary)}.plan h2{font-size:24px}.amount{font-size:40px;font-weight:700;line-height:1.2;margin:24px 0}.plan p{line-height:1.6}.plan .btn{margin-top:auto}.fine{font-size:13px;line-height:1.6;margin-top:24px}.offcanvas{--bs-offcanvas-width:440px}.offcanvas-header,.offcanvas-body{padding:24px}.offcanvas-header{gap:16px}.offcanvas-title{font-size:24px}.offcanvas-body p,.offcanvas-body li{line-height:1.6}.offcanvas-body ul{padding-left:24px}.offcanvas-body li{margin:12px 0}#selected{padding:24px;border:1px solid var(--bs-color-border-default);margin-top:24px}#selected p{margin:0}#selected .btn{margin-top:16px}@media(max-width:720px){main{padding:16px}.plans{grid-template-columns:1fr}.plan{padding:24px}.amount{margin:16px 0}.plan .btn{margin-top:16px}}[hidden]{display:none!important}

Riferimento del codice

  • Salva orange-index.html come index.html e lascia invariati i nomi degli altri due file.

orange-app.js

Gestione nativa degli eventi del drawer e stato locale della selezione e del tema.

javascript
const plans=[["Everyday", "8 GB", "For messages, maps and occasional listening.", ["8 GB of fictional monthly data", "One original study profile", "No contract, order or payment"]], ["Explore", "25 GB", "More room for podcasts and a longer journey.", ["25 GB of fictional monthly data", "One original study profile", "No contract, order or payment"]], ["Create", "60 GB", "A larger sample allowance for sharing on the move.", ["60 GB of fictional monthly data", "One original study profile", "No contract, order or payment"]]];let current=0;const drawer=document.querySelector('#details');drawer.addEventListener('show.bs.offcanvas',event=>{current=Number(event.relatedTarget.dataset.plan);const[name,amount,description,features]=plans[current];document.querySelector('#drawer-title').textContent=name+' · '+amount;document.querySelector('#drawer-description').textContent=description;document.querySelector('#features').replaceChildren(...features.map(text=>{const li=document.createElement('li');li.textContent=text;return li}));});document.querySelector('#choose').addEventListener('click',()=>{document.querySelector('#selected').hidden=false;document.querySelector('#selection-message').textContent=plans[current][0]+' is your local preview choice. No order was placed.';oudsWeb.Offcanvas.getInstance(drawer).hide();});document.querySelector('#clear').addEventListener('click',()=>{document.querySelector('#selected').hidden=true;document.querySelector('[data-plan]').focus()});document.querySelector('#theme').addEventListener('click',e=>{let dark=document.documentElement.dataset.bsTheme!=='dark';document.documentElement.dataset.bsTheme=dark?'dark':'light';e.currentTarget.textContent=dark?'Use light appearance':'Use dark appearance'});

Riferimento del codice

  • Salva orange-index.html come index.html e lascia invariati i nomi degli altri due file.
04

Orange OUDS Web Configurazione dell’agente AI del sistema di design

Punto di partenza per l’implementazione

Apri http://localhost:8000/. Usa asset nativi compilati e non richiede una build Sass.

sh
npm init -y
npm install @ouds/[email protected] @ouds/[email protected]
# Save index.html, orange.css and orange-app.js from the supplied examples.
python3 -m http.server 8000

Un prompt per il tuo progetto

Prompt per l’agente
Implementa lo studio comparativo completo di OUDS Web 1.4, con i pacchetti common/Orange corrispondenti, le varianti reali btn-brand e btn-default, gli eventi nativi di Offcanvas e API, la risoluzione dei token per le modalità chiara e scura e il fallback esplicito ad Arial. Mantieni fittizi tutti i contenuti dei bundle e fai sì che la selezione resti strettamente locale.
05

Orange OUDS Web Fonti e ambito del sistema di design

Runtime effettivi di OUDS Web CSS e Offcanvas, con bundle fittizi originali OpenDesign e selezione locale. Il fallback ad Arial è esplicito; non viene rappresentata alcuna offerta commerciale né alcun ordine.