# Sistema di design HPE Grommet

## HPE Grommet Anteprima dell’interfaccia del sistema di design

Modifica l’allocazione proposta e prepara un piano locale convalidato.

## HPE Grommet Riferimento di progettazione del sistema di design

Tema base di Grommet v2 generato con baseSpacing=24 e scale=6; questi non sono valori di grommet-theme-hpe. Lo starter nativo imposta esplicitamente Arial e i colori dimostrativi del brand e del focus come scelte del tema dell’applicazione.

### Scala predefinita delle dimensioni dei bordi

| Nome / regola | Valore / configurazione | Utilizzo |
| --- | --- | --- |
| global.edgeSize.hair | 1px | Dimensione predefinita al di fuori della variante adattiva small. |
| global.edgeSize.xxsmall | 3px | Dimensione predefinita al di fuori della variante adattiva small. |
| global.edgeSize.xsmall | 6px | Dimensione predefinita al di fuori della variante adattiva small. |
| global.edgeSize.small | 12px | Dimensione predefinita al di fuori della variante adattiva small. |
| global.edgeSize.medium | 24px | Dimensione predefinita al di fuori della variante adattiva small. |
| global.edgeSize.large | 48px | Dimensione predefinita al di fuori della variante adattiva small. |
| global.edgeSize.xlarge | 96px | Dimensione predefinita al di fuori della variante adattiva small. |
### Override adattivi per small

| Nome / regola | Valore / configurazione | Utilizzo |
| --- | --- | --- |
| global.breakpoints.small.value | 768 | Limite del breakpoint small nel tema base. |
| small.edgeSize.xxsmall | 2px | Spaziatura fine per schermi piccoli. |
| small.edgeSize.xsmall | 3px | Spaziatura xsmall per schermi piccoli. |
| small.edgeSize.small | 6px | Spaziatura interna small adattiva. |
| small.edgeSize.medium | 12px | Spaziatura interna medium adattiva. |
| small.edgeSize.large | 24px | Spaziatura interna ampia e adattiva. |
| global.breakpoints.medium.value | 1536 | Limite del breakpoint successivo del tema base. |
### Colori e controlli di base

| Nome / regola | Valore / configurazione | Utilizzo |
| --- | --- | --- |
| global.colors.brand | #7D4CDB | Colore del brand Grommet predefinito, non il verde HPE. |
| global.colors.focus | #6FFFB0 | Colore di accento predefinito per il focus. |
| global.colors.text.light | #444444 | Testo del corpo nel tema chiaro. |
| global.colors.text.dark | #f8f8f8 | Testo del corpo nel tema scuro. |
| global.colors.background-front.light | #FFFFFF | Superficie chiara in primo piano. |
| global.colors.background-front.dark | #444444 | Superficie scura in primo piano. |
| global.control.border.radius | 4px | Angolo predefinito dei controlli. |
| global.control.border.width | 1px | Bordo di base dei controlli. |
### Contratto per moduli e campi

| Nome / regola | Valore / configurazione | Utilizzo |
| --- | --- | --- |
| Form.value | Object keyed by field name | Usa un unico oggetto controllato per la prenotazione. |
| Form.onChange | (value) => {} | Riceve l’oggetto aggiornato, non un evento DOM. |
| Form.onSubmit | ({ value, touched }) => {} | Legge il valore corrente del modulo accettato. |
| Form.validate | blur \| submit \| change | Scegli quando eseguire la convalida. |
| Form.errors | Object keyed like value | Associa gli errori remoti o dell’applicazione ai campi. |
### Integrazione di Select e degli intervalli

| Nome / regola | Valore / configurazione | Utilizzo |
| --- | --- | --- |
| Select.options | String array or object array | L’esempio usa stringhe per mantenere semplice la struttura dei valori. |
| Select.onChange | ({ value, option }) => {} | Non leggere event.target.value per Select. |
| Select.valueKey | { key, reduce } for object options | reduce restituisce il valore indicizzato per chiave, non l’oggetto completo. |
| Select.labelKey | Property name or function | Etichetta visibile per le opzioni a oggetto. |
| Select.onSearch | Function; enables search input | Se necessario, fornisci il filtraggio dell’applicazione. |
### Struttura del meter

| Nome / regola | Valore / configurazione | Utilizzo |
| --- | --- | --- |
| value | number | Quantità rappresentata; ignorata se viene fornito values. |
| max | number or numeric string | Capacità totale disponibile; non confonderla con una percentuale. |
| type | bar \| circle \| pie \| semicircle | Usa circle per la panoramica sull’utilizzo. |
| color | Color identifier | Valido con un singolo valore. |
| a11yTitle | string | Descrivi la misura e il denominatore. |
| size | Named size or CSS dimension | Mantieni l’anello entro la larghezza disponibile. |
## HPE Grommet Guida completa al sistema di design

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

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

## Sistema di design HPE Grommet: Grommet di base e tema HPE

### Non presentare il viola come token HPE

> Grommet è un framework React associato a HPE, con un proprio tema base. Il pacchetto separato grommet-theme-hpe esporta hpe per le applicazioni che adottano lo stile di design HPE. Questo riferimento illustra il framework di base e un esempio configurato in modo esplicito. Il viola del brand e il colore menta del focus provengono dal tema base; non vengono presentati come la palette attuale del brand HPE.

Leggi la specifica di supporto

### Un tema applicativo esplicito e compatto

La configurazione imposta Arial come scelta tipografica dell’applicazione e riprende i colori documentati per il brand e il focus del tema base. Tutte le altre regole dei componenti ereditano da Grommet. Un prodotto HPE reale può invece passare il tema hpe approvato; in tal caso, verifica la spaziatura e la tipografia risultanti, perché le sostituzioni del tema possono modificare i valori base elencati qui.

Leggi la specifica di supporto

## Sistema di design HPE Grommet: le scale del tema possono cambiare a un breakpoint

### I valori nominali sono decisioni adattive

Il generatore di base parte da 24 pixel. La spaziatura medium predefinita dei bordi è 24px, ma al breakpoint small medium passa a 12px. Un Box con padding adattivo può quindi restringersi anche se nel JSX è ancora indicato medium. Esamina insieme la scala e la modifica al breakpoint; non garantire che medium corrisponda sempre a ventiquattro pixel.

Leggi la specifica di supporto

### Usa Box per il layout effettivo

Il pianificatore usa un Box a colonna come pagina e un Box a riga/colonna adattivo per il modulo e il riepilogo della capacità. Il modulo figlio può espandersi, mentre il riepilogo mantiene una larghezza minima adeguata. Sugli schermi piccoli, il grafico segue i controlli, rispettando l’ordine del documento.

Leggi la specifica di supporto

## Sistema di design HPE Grommet: una base leggibile definita con cura

### La dimensione del font e l’interlinea sono valori distinti del tema

Il generatore di base ricava un font di diciotto pixel e un’interlinea di ventiquattro pixel dal proprio valore di spaziatura. L’esempio usa esplicitamente questa coppia con Arial, per non suggerire che sia stato scaricato un font proprietario del brand. Le intestazioni usano Grommet Heading e il testo usa Text, così il tema può risolverne i ruoli senza riprodurre gli elementi interni dei componenti in CSS.

Leggi la specifica di supporto

## Sistema di design HPE Grommet: un unico oggetto controllato per la prenotazione

### I nomi collegano i campi al modulo

Form gestisce il contratto coordinato del modulo. Nel modello controllato, value e onChange appartengono al chiamante. Il name di ogni FormField e del relativo input figlio identifica la chiave corrispondente nel valore. Il nostro oggetto di prenotazione contiene name e pool. Lo slider della capacità è mantenuto come numero separato perché aggiorna un diagramma in tempo reale prima dell’invio.

Leggi la specifica di supporto

### Convalida il nome della prenotazione

Un FormField obbligatorio con name="name" racchiude TextInput id="reservation-name". htmlFor collega l’etichetta visibile. Il validatore personalizzato restituisce un errore esplicito se il valore, dopo aver rimosso gli spazi iniziali e finali, è più corto di tre caratteri. Imposta la convalida su submit, così un modulo vuoto non ancora toccato non mostrerà subito un errore.

Leggi la specifica di supporto

## Sistema di design HPE Grommet Select del sistema di progettazione ha una propria struttura degli eventi

### Le stringhe rendono prevedibile il caso più semplice

Le opzioni dei pool di esempio sono Production e Development. Il valore controllato è quindi una stringa. Se passi a opzioni oggetto, imposta labelKey e, facoltativamente, valueKey con reduce, quindi mantieni il valore memorizzato coerente con questa scelta. onChange di Select espone un oggetto valore/opzione, a differenza dell’evento dell’input range nativo.

Leggi la specifica di supporto

### Ricerca e caricamento delle opzioni sono responsabilità dell’applicazione

Select può mostrare un campo di ricerca quando viene fornita la proprietà onSearch. Questa proprietà non implica che tutte le opzioni vengano filtrate automaticamente. Mantieni separata la raccolta di origine non filtrata, così da poterla ripristinare quando la ricerca viene chiusa o cancellata. Per i due pool, l’esempio omette intenzionalmente la ricerca.

Leggi la specifica di supporto

## Sistema di design HPE Grommet Un indicatore del sistema di progettazione richiede unità e un denominatore

### Rappresenta la capacità, non una percentuale senza spiegazione

Meter riceve la quantità utilizzata prevista e max=100. In questo pianificatore illustrativo, il pool di esempio ha già 35 unità utilizzate e la prenotazione proposta varia da 5 a 60. La percentuale coincide per caso con il numero, perché il denominatore della dimostrazione è cento. Il codice passa comunque max in modo esplicito, così il contratto dei dati resta valido anche con un totale diverso.

Leggi la specifica di supporto

### Mantieni sincronizzati grafico e testo

Il cerchio, l’etichetta dell’utilizzo previsto e le unità rimanenti derivano dallo stesso valore numerico del cursore. RangeInput nativo genera un evento DOM, quindi converti event.target.value in Number prima di eseguire calcoli. Altrimenti, sommare una stringa a trentacinque può produrre un totale visivamente plausibile ma errato.

Leggi la specifica di supporto

## Sistema di design HPE Grommet Scorrimento del documento e composizione per schermi stretti nel sistema di progettazione

### Scegli full="min" per questa pagina

Grommet full=true è pensato per un’applicazione che gestisce la propria viewport e lo scorrimento interno. Questo pianificatore usa full="min" per consentire al documento di estendersi. In questo modo, su un telefono il modulo e il relativo messaggio di convalida non restano intrappolati in un contenitore ad altezza fissa.

Leggi la specifica di supporto

### Leggi ResponsiveContext all’interno di Grommet

Un componente figlio usa il contesto corrente e sceglie column sugli schermi piccoli e row negli altri casi. Il provider deve racchiudere il componente figlio, affinché il contesto rifletta il tema scelto. Quando lo spazio disponibile è ridotto, il layout predefinito resta una colonna naturale.

- Mantieni le etichette dei campi sopra i relativi input.

- Inserisci il riepilogo della capacità dopo i controlli nell’ordine del sorgente.

- Consenti alla riga delle azioni di andare a capo senza nascondere il testo di convalida.

Leggi la specifica di supporto

## Sistema di design HPE Grommet Collega etichette, errori e misurazioni nel sistema di progettazione

### Attribuisci un significato a ogni valore numerico

Il controllo dell’intervallo ha un’etichetta persistente e un’unità visibile. Il cerchio riceve un a11yTitle che include l’utilizzo previsto e la capacità totale. Il testo vicino espone gli stessi numeri, così l’informazione non dipende da un arco colorato. Il testo dell’errore descrive il problema della prenotazione e rimane accanto al relativo campo.

Leggi la specifica di supporto

### Rendi esplicito l’esito locale

Prepara piano memorizza un’istantanea locale del modulo convalidato e dell’allocazione corrente. Non effettua il provisioning dell’infrastruttura. Il risultato cambia solo dopo l’invio valido, mentre le modifiche al cursore restano una proposta. Questa distinzione è utile per confrontare un piano preparato con la bozza attualmente in modifica.

1. Invia un nome vuoto e verifica l’errore del campo obbligatorio.

2. Inserisci un nome, scegli un pool e modifica l’allocazione.

3. Prepara il piano e verifica che l’istantanea locale contenga il pool selezionato e il valore numerico in unità.

Leggi la specifica di supporto

## Sistema di design HPE Grommet Crea una composizione Grommet completa

### Installa il framework e la libreria peer per gli stili

Installa grommet con styled-components e il runtime React in un progetto client. La configurazione monta Grommet, poi un componente figlio che usa ResponsiveContext, un Form controllato, FormField/TextInput/Select, RangeInput e Meter. Usa la proprietà label di Button anziché i children, così il comportamento predefinito del pulsante con stile di etichetta rimane esplicito.

Leggi la specifica di supporto

## Sistema di design HPE Grommet Esempi di componenti del sistema di progettazione

### Esempio interattivo completo e autonomo

Salva il documento completo come index.html e aprilo in un browser. Interpretazione indipendente di HTML/CSS delle dimensioni e dei colori di Grommet base, con font Arial scelto esplicitamente; non è il tema HPE separato.

```
<!doctype html><html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Capacity reservation — Grommet study</title><style>*{box-sizing:border-box}body{margin:0;background:white;color:#444;font:18px/24px Arial,sans-serif}header{padding:24px 36px;border-bottom:1px solid #ddd;display:flex;gap:12px;align-items:center}.mark{width:22px;height:22px;border:4px solid #7d4cdb;border-radius:50%}main{max-width:1050px;margin:auto;padding:36px}h1{font-size:36px;line-height:42px;margin:12px 0 24px;color:#222}h2{font-size:24px;line-height:30px;margin:0 0 12px}.intro{max-width:650px;margin-bottom:36px}.layout{display:grid;grid-template-columns:minmax(0,1fr) 310px;gap:48px}label{display:block;font-weight:600;margin-bottom:12px}input,select,button{font:inherit;max-width:100%}input[type=text],select{width:100%;border:1px solid #888;border-radius:4px;background:transparent;padding:12px;color:#444}input:focus-visible,select:focus-visible,button:focus-visible{outline:3px solid #6fffb0;outline-offset:3px}.field{margin-bottom:24px}input[type=range]{width:100%;accent-color:#7d4cdb}.limits{display:flex;justify-content:space-between;font-size:14px;color:#666;margin-top:6px}button{border:2px solid #7d4cdb;border-radius:24px;background:#7d4cdb;color:white;padding:10px 24px;font-weight:600;cursor:pointer}button:hover{background:#6839c0}aside{background:#f2f2f2;padding:24px;border-radius:12px;align-self:start;text-align:center}.ring{width:192px;height:192px;border-radius:50%;background:conic-gradient(#7d4cdb var(--used),#dadada 0);margin:24px auto;display:grid;place-items:center;position:relative}.ring:before{content:'';position:absolute;inset:12px;background:#f2f2f2;border-radius:50%}.ring span{position:relative;font-size:36px;font-weight:bold}.ring small{display:block;font-size:14px;font-weight:400;line-height:20px}.legend{text-align:left;border-top:1px solid #ddd;padding-top:12px;font-size:14px}.legend div{display:flex;justify-content:space-between;margin:8px 0}.error{font-size:14px;color:#b30000;margin-top:6px}#result{background:#f2f2f2;border-left:4px solid #7d4cdb;padding:24px;margin-top:36px}footer{font-size:12px;line-height:18px;color:#666;border-top:1px solid #ddd;padding:24px 36px}@media(max-width:700px){main{padding:24px}.layout{grid-template-columns:1fr;gap:24px}h1{font-size:30px;line-height:36px}header,footer{padding:24px}.intro{margin-bottom:24px}}</style><header><span class="mark" aria-hidden="true"></span><strong>Capacity planner</strong></header><main><h1>Plan a reservation</h1><p class="intro">Explore a proposed allocation before preparing a local plan. This model contains 100 capacity units.</p><div class="layout"><form id="form" novalidate><div class="field"><label for="name">Reservation name</label><input id="name" type="text" required aria-describedby="error"><div class="error" id="error" hidden></div></div><div class="field"><label for="pool">Capacity pool</label><select id="pool"><option>Production</option><option>Development</option></select></div><div class="field"><label for="units">Requested allocation: <output id="requested">20</output> units</label><input id="units" type="range" min="5" max="60" step="5" value="20"><div class="limits"><span>5 units</span><span>60 units</span></div></div><button type="submit">Prepare plan</button><p style="font-size:14px;color:#666">No infrastructure will be provisioned.</p></form><aside><h2>Projected usage</h2><div class="ring" id="ring" style="--used:55%" role="img" aria-label="55 of 100 units projected usage"><span><output id="used">55</output><small>of 100 units</small></span></div><div class="legend"><div><span>Already used</span><strong>35</strong></div><div><span>Proposed reservation</span><strong id="proposed">20</strong></div><div><span>Remaining</span><strong id="remaining">45</strong></div></div></aside></div><section id="result" hidden><h2>Prepared local plan</h2><p id="snapshot" role="status"></p><p style="font-size:14px">This snapshot changes only when you prepare the plan again.</p></section></main><footer>Independent base Grommet HTML/CSS interpretation. Base purple/mint palette and spacing; Arial is an application font choice. This is not the separate HPE branded theme.</footer><script>
const $=id=>document.getElementById(id);$('units').oninput=()=>{const units=Number($('units').value),used=35+units;$('requested').textContent=$('proposed').textContent=units;$('used').textContent=used;$('remaining').textContent=100-used;$('ring').style.setProperty('--used',used+'%');$('ring').setAttribute('aria-label',used+' of 100 units projected usage')};$('form').onsubmit=e=>{e.preventDefault();const name=$('name').value.trim();if(name.length<3){$('error').textContent='Use at least three characters for the reservation name.';$('error').hidden=false;$('name').setAttribute('aria-invalid','true');$('name').focus();return}$('error').hidden=true;$('name').removeAttribute('aria-invalid');$('snapshot').textContent=name+' · '+$('pool').value+' · '+$('units').value+' units. Prepared in this local demonstration.';$('result').hidden=false};
</script></html>
```

Riferimento del codice

- I calcoli della capacità usano il pool di esempio visualizzato. Il layout autonomo è indipendente HTML; l’esempio nativo seleziona Grommet base anziché il tema HPE separato.

### Implementazione nativa completa

L’implementazione completa descritta nella configurazione, raccolta qui insieme alle spiegazioni specifiche di API. Segui i prerequisiti documentati per pacchetti e build nella configurazione.

```
// npm install react react-dom grommet styled-components
import React, { useContext, useState } from 'react';
import { createRoot } from 'react-dom/client';
import { Grommet, Box, Heading, Text, Form, FormField, TextInput,
 Select, RangeInput, Meter, Button, ResponsiveContext } from 'grommet';
const theme={global:{font:{family:'Arial, sans-serif',size:'18px',height:'24px'},colors:{brand:'#7D4CDB',focus:'#6FFFB0'}}};
function Planner(){
 const size=useContext(ResponsiveContext);
 const [value,setValue]=useState({name:'',pool:'Production'});
 const [units,setUnits]=useState(20),[plan,setPlan]=useState(null);
 const used=35+units;
 return <Box pad="medium" gap="medium" width={{max:'large'}} margin="auto">
 <Heading level={1} margin="none">Plan a reservation</Heading>
 <Text>Local capacity model. No infrastructure is provisioned.</Text>
 <Box direction={size==='small'?'column':'row'} gap="large">
 <Box flex><Form value={value} onChange={setValue} validate="submit" onSubmit={({value:accepted})=>setPlan({...accepted,units})}>
 <FormField name="name" htmlFor="reservation-name" label="Reservation name" required validate={name=>String(name || '').trim().length<3?'Use at least three characters':undefined}>
 <TextInput name="name" id="reservation-name"/></FormField>
 <FormField name="pool" htmlFor="pool" label="Capacity pool"><Select name="pool" id="pool" options={['Production','Development']}/></FormField>
 <Box gap="small" margin={{vertical:'medium'}}><label htmlFor="units">Requested allocation: {units} units</label>
 <RangeInput id="units" min={5} max={60} step={5} value={units} onChange={event=>setUnits(Number(event.target.value))}/></Box>
 <Button type="submit" primary label="Prepare plan"/>
 </Form></Box>
 <Box align="center" gap="small" pad="medium" background="light-2" round="small">
 <Meter type="circle" value={used} max={100} size="small" thickness="small" color="brand" a11yTitle={`${used} of 100 units projected usage`}/>
 <Text weight="bold">{used} / 100 units used</Text><Text>{100-used} units remaining</Text>
 </Box></Box>
 {plan&&<Box background="light-2" pad="medium" role="status"><Text>Local plan: {plan.name} · {plan.pool} · {plan.units} units</Text></Box>}
 </Box>
}
createRoot(document.getElementById('root')).render(<Grommet theme={theme} themeMode="light" full="min"><Planner/></Grommet>);
```

Riferimento del codice

- main.jsx client per un progetto con un elemento root. Grommet base con override del font e del brand dell’applicazione dichiarati esplicitamente. Non si presume implicitamente l’uso del tema HPE. API verificato rispetto alla documentazione ufficiale; la compilazione nativa non è stata verificata qui.

### Passa intenzionalmente al tema brandizzato HPE

Usa il pacchetto separato solo se è questo il design target desiderato; verifica nuovamente i valori rispetto alla versione installata.

```
// npm install grommet-theme-hpe
import { Grommet } from 'grommet';
import { hpe } from 'grommet-theme-hpe';
// Wrap the Planner from the full setup example:
<Grommet theme={hpe} themeMode="light" full="min"><Planner /></Grommet>
```

Riferimento del codice

- La tabella di riferimento qui sopra descrive il tema base, non questo override facoltativo.

### Valori Select di tipo oggetto

Memorizza l’ID del pool e visualizzane l’etichetta.

```
<Select options={[{id:'prod',label:'Production'},{id:'dev',label:'Development'}]}
 labelKey="label" valueKey={{key:'id',reduce:true}}
 value={poolId} onChange={({value})=>setPoolId(value)} />
```

Riferimento del codice

- Dichiara poolId/setPoolId con useState nel componente chiamante.

- Con reduce abilitato, il valore memorizzato è l’ID, non l’oggetto.

## Sistema di design HPE Grommet Configurazione dell’agente IA per il sistema di progettazione

### Punto di partenza per l’implementazione

main.jsx client per un progetto con un elemento root. Grommet base con override del font e del brand dell’applicazione dichiarati esplicitamente. Non si presume implicitamente l’uso del tema HPE. API verificato rispetto alla documentazione ufficiale; la compilazione nativa non è stata verificata qui.

```
// npm install react react-dom grommet styled-components
import React, { useContext, useState } from 'react';
import { createRoot } from 'react-dom/client';
import { Grommet, Box, Heading, Text, Form, FormField, TextInput,
 Select, RangeInput, Meter, Button, ResponsiveContext } from 'grommet';
const theme={global:{font:{family:'Arial, sans-serif',size:'18px',height:'24px'},colors:{brand:'#7D4CDB',focus:'#6FFFB0'}}};
function Planner(){
 const size=useContext(ResponsiveContext);
 const [value,setValue]=useState({name:'',pool:'Production'});
 const [units,setUnits]=useState(20),[plan,setPlan]=useState(null);
 const used=35+units;
 return <Box pad="medium" gap="medium" width={{max:'large'}} margin="auto">
 <Heading level={1} margin="none">Plan a reservation</Heading>
 <Text>Local capacity model. No infrastructure is provisioned.</Text>
 <Box direction={size==='small'?'column':'row'} gap="large">
 <Box flex><Form value={value} onChange={setValue} validate="submit" onSubmit={({value:accepted})=>setPlan({...accepted,units})}>
 <FormField name="name" htmlFor="reservation-name" label="Reservation name" required validate={name=>String(name || '').trim().length<3?'Use at least three characters':undefined}>
 <TextInput name="name" id="reservation-name"/></FormField>
 <FormField name="pool" htmlFor="pool" label="Capacity pool"><Select name="pool" id="pool" options={['Production','Development']}/></FormField>
 <Box gap="small" margin={{vertical:'medium'}}><label htmlFor="units">Requested allocation: {units} units</label>
 <RangeInput id="units" min={5} max={60} step={5} value={units} onChange={event=>setUnits(Number(event.target.value))}/></Box>
 <Button type="submit" primary label="Prepare plan"/>
 </Form></Box>
 <Box align="center" gap="small" pad="medium" background="light-2" round="small">
 <Meter type="circle" value={used} max={100} size="small" thickness="small" color="brand" a11yTitle={`${used} of 100 units projected usage`}/>
 <Text weight="bold">{used} / 100 units used</Text><Text>{100-used} units remaining</Text>
 </Box></Box>
 {plan&&<Box background="light-2" pad="medium" role="status"><Text>Local plan: {plan.name} · {plan.pool} · {plan.units} units</Text></Box>}
 </Box>
}
createRoot(document.getElementById('root')).render(<Grommet theme={theme} themeMode="light" full="min"><Planner/></Grommet>);
```

### Un prompt per il tuo progetto

```
Implementa il pianificatore di prenotazioni fornito basato su Grommet base, con un Form controllato, FormField con nome, Select, RangeInput e Meter con max esplicito. Mantieni distinti i valori del tema base da quelli di grommet-theme-hpe. Converti il valore del cursore in un numero, mostra le unità, convalida il nome e genera solo un’istantanea locale del piano.
```

## Sistema di design HPE Grommet Fonti e ambito del sistema di progettazione

Riferimento indipendente per un’implementazione basata su Grommet base. L’adozione del tema brandizzato HPE è illustrata separatamente. I valori della capacità sono dati locali fittizi, non metriche infrastrutturali né valori di provisioning.

- Contenitore Grommet Tema, dimensionamento a pagina intera e ambito dei portali.

- Fonte del tema base Scala predefinita, colori e override responsive.

- Box Layout e spaziatura interna responsive.

- Form Valore oggetto controllato e ciclo di vita della convalida.

- FormField Associazione dei nomi, etichette e convalida personalizzata.

- Select Callback valore/opzione e opzioni oggetto.

- RangeInput Interazione nativa con l’intervallo.

- Meter Valore, massimo e descrizione accessibile.

- ResponsiveContext Leggi il breakpoint del tema attivo.

- Tema HPE Pacchetto separato facoltativo per il tema brandizzato.

## Sistema di design HPE Grommet Risorse correlate del sistema di progettazione

### Infor sistema di design

Componi un modulo aziendale di manutenzione con gli stati effettivi degli input IDS, gli alias del tema e un identificativo preciso dell’asset. Esamina i token pubblici correnti del tema, un pacchetto Web Components con versione bloccata e un flusso locale per le bozze con convalida e ripristino.

### Kajabi Sage

Crea un pannello di condivisione per creator con informazioni chiare sul corso, azioni di copia immediate e riscontri affidabili sugli appunti. Esplora l’anatomia dei componenti Rails di Sage, le specifiche tipografiche pubblicate e il più recente livello di token Pine caricato esternamente.

### Kiwi Orbit

Una guida Orbit dedicata ai viaggi, con colori e spaziature effettivi del prodotto, opzioni native per i bagagli, un riepilogo dei prezzi coerente e un flusso completo di revisione locale.


- [Riferimento per l’implementazione](https://v2.grommet.io/grommet)
- [Fonte](https://raw.githubusercontent.com/grommet/grommet/master/src/js/themes/base.js)
- [Fonte](https://v2.grommet.io/form)
- [Fonte](https://v2.grommet.io/select)
- [Fonte](https://v2.grommet.io/meter)
- [Leggi la specifica di supporto](https://github.com/grommet/grommet-theme-hpe)
- [Leggi la specifica di supporto](https://v2.grommet.io/grommet)
- [Leggi la specifica di supporto](https://raw.githubusercontent.com/grommet/grommet/master/src/js/themes/base.js)
- [Leggi la specifica di supporto](https://v2.grommet.io/box)
- [Leggi la specifica di supporto](https://v2.grommet.io/form)
- [Leggi la specifica di supporto](https://v2.grommet.io/formfield)
- [Leggi la specifica di supporto](https://v2.grommet.io/select)
- [Leggi la specifica di supporto](https://v2.grommet.io/meter)
- [Leggi la specifica di supporto](https://v2.grommet.io/rangeinput)
- [Leggi la specifica di supporto](https://v2.grommet.io/responsivecontext)
- [Leggi la specifica di supporto](https://github.com/grommet/grommet)
- [Riferimento del codice](https://v2.grommet.io/grommet)
- [Riferimento del codice](https://github.com/grommet/grommet-theme-hpe)
- [Riferimento del codice](https://v2.grommet.io/select)
- [Contenitore Grommet Tema, dimensionamento a pagina intera e ambito dei portali.](https://v2.grommet.io/grommet)
- [Fonte del tema base Scala predefinita, colori e override responsive.](https://raw.githubusercontent.com/grommet/grommet/master/src/js/themes/base.js)
- [Box Layout e spaziatura interna responsive.](https://v2.grommet.io/box)
- [Form Valore oggetto controllato e ciclo di vita della convalida.](https://v2.grommet.io/form)
- [FormField Associazione dei nomi, etichette e convalida personalizzata.](https://v2.grommet.io/formfield)
- [Select Callback valore/opzione e opzioni oggetto.](https://v2.grommet.io/select)
- [RangeInput Interazione nativa con l’intervallo.](https://v2.grommet.io/rangeinput)
- [Meter Valore, massimo e descrizione accessibile.](https://v2.grommet.io/meter)
- [ResponsiveContext Leggi il breakpoint del tema attivo.](https://v2.grommet.io/responsivecontext)
- [Tema HPE Pacchetto separato facoltativo per il tema brandizzato.](https://github.com/grommet/grommet-theme-hpe)
