Unternehmenssoftware · Neue Ressource

HPE Grommet-Designsystem.

Modellieren Sie eine Kapazitätsreservierung mit den Layout-Primitiven, gesteuerten Formularfeldern und numerischen Anzeigen von Grommet. Setzen Sie die Theme-Skala bewusst ein und halten Sie das Grommet-Basistheme vom separat installierten HPE-Theme getrennt.

OpenDesign-Leitfaden9 Kapitel38 ReferenzeinträgeOriginaler Anwendungsleitfaden
01

Vorschau der HPE Grommet-Designsystemoberfläche

Passe eine vorgeschlagene Zuweisung an und erstelle einen validierten lokalen Plan.

Planer für KapazitätsreservierungenVollständiges Beispiel öffnen
Eigenständige Interpretation von HTML/CSS-Abmessungen und -Farben der Grommet-Basis mit explizit gewählter Arial-Schrift; nicht das separate HPE-Thema. · Implementierungsreferenz
02

Designreferenz für das HPE Grommet-Designsystem

Grommet-v2-Basisthema, generiert mit baseSpacing=24 und scale=6; dies sind keine Werte aus grommet-theme-hpe. Das native Grundgerüst legt Arial sowie die gezeigten Marken- und Fokusfarben explizit als Anwendungsentscheidungen fest.

Standardmäßige Skala der Randgrößen

Quelle
Name / RegelWert / KonfigurationVerwendung
global.edgeSize.hair1pxStandardgröße außerhalb der kleinen responsiven Anpassung.
global.edgeSize.xxsmall3pxStandardgröße außerhalb der kleinen responsiven Anpassung.
global.edgeSize.xsmall6pxStandardgröße außerhalb der kleinen responsiven Anpassung.
global.edgeSize.small12pxStandardgröße außerhalb der kleinen responsiven Anpassung.
global.edgeSize.medium24pxStandardgröße außerhalb der kleinen responsiven Anpassung.
global.edgeSize.large48pxStandardgröße außerhalb der kleinen responsiven Anpassung.
global.edgeSize.xlarge96pxStandardgröße außerhalb der kleinen responsiven Anpassung.

Kleine responsive Anpassungen

Quelle
Name / RegelWert / KonfigurationVerwendung
global.breakpoints.small.value768Grenzwert des kleinen Breakpoints im Basisthema.
small.edgeSize.xxsmall2pxFeiner Abstand auf kleinen Bildschirmen.
small.edgeSize.xsmall3pxXsmall-Abstand auf kleinen Bildschirmen.
small.edgeSize.small6pxResponsives kleines Padding.
small.edgeSize.medium12pxResponsives mittleres Padding.
small.edgeSize.large24pxResponsives großes Padding.
global.breakpoints.medium.value1536Nächster Breakpoint-Grenzwert der Basis.

Basisfarben und Steuerelemente

Quelle
Name / RegelWert / KonfigurationVerwendung
global.colors.brand#7D4CDB Grommet-Standardmarkenfarbe, nicht HPE-Grün.
global.colors.focus#6FFFB0 Standardmäßige Fokusakzentfarbe.
global.colors.text.light#444444 Fließtextfarbe im hellen Thema.
global.colors.text.dark#f8f8f8 Fließtextfarbe im dunklen Thema.
global.colors.background-front.light#FFFFFF Helle Vordergrundfläche.
global.colors.background-front.dark#444444 Dunkle Vordergrundfläche.
global.control.border.radius4pxEckenradius des Basis-Steuerelements.
global.control.border.width1pxRahmen des Basis-Steuerelements.

Vereinbarung für Formulare und Felder

Quelle
Name / RegelWert / KonfigurationVerwendung
Form.valueObject keyed by field nameVerwende ein einzelnes kontrolliertes Reservierungsobjekt.
Form.onChange(value) => {}Erhält das aktualisierte Objekt, kein DOM-Ereignis.
Form.onSubmit({ value, touched }) => {}Lies den akzeptierten aktuellen Formularwert aus.
Form.validateblur | submit | changeLege fest, wann die Validierung ausgeführt wird.
Form.errorsObject keyed like valueWeise Feldern Fehler aus entfernten Quellen oder der Anwendung zu.

Integration von Select und Bereichen

Quelle
Name / RegelWert / KonfigurationVerwendung
Select.optionsString array or object arrayDas Beispiel verwendet Zeichenfolgen, um das Wertformat einfach zu halten.
Select.onChange({ value, option }) => {}Lies für Select nicht event.target.value aus.
Select.valueKey{ key, reduce } for object optionsreduce gibt den Schlüsselwert statt des vollständigen Objekts zurück.
Select.labelKeyProperty name or functionSichtbare Bezeichnung für Objektoptionen.
Select.onSearchFunction; enables search inputStelle bei Bedarf eine Filterfunktion der Anwendung bereit.

Aufbau des Messgeräts

Quelle
Name / RegelWert / KonfigurationVerwendung
valuenumberDargestellter Wert; wird ignoriert, wenn values angegeben ist.
maxnumber or numeric stringVerfügbare Gesamtkapazität; nicht mit einem Prozentwert verwechseln.
typebar | circle | pie | semicircleVerwende circle für die Auslastungsübersicht.
colorColor identifierMit einem einzelnen Wert gültig.
a11yTitlestringBeschreibe den Messwert und den Nenner.
sizeNamed size or CSS dimensionDer Ring muss innerhalb der verfügbaren Breite bleiben.
03

Vollständiger Leitfaden zum HPE Grommet-Designsystem

Ein praktischer Leitfaden zur Auswahl, Anwendung und Überprüfung dieses Systems für ein echtes Interface.

DESIGN-hpe-grommet.md

Umfassende Anleitung, Einstieg in die Implementierung und Links zu den Quellen.

Leitfaden herunterladen

HPE Grommet-Designsystem: Grommet-Basis und HPE-Thema

Lila nicht als HPE-Token bezeichnen

Grommet ist ein mit HPE verbundenes React-Framework mit eigenem Basisthema. Das separate Paket grommet-theme-hpe exportiert hpe für Anwendungen, die das HPE-Design übernehmen. Diese Referenz behandelt das Basis-Framework und ein explizit konfiguriertes Beispiel. Das violette Markenthema und die mintgrüne Fokusfarbe stammen aus dem Basisthema; sie werden nicht als aktuelle HPE-Markenpalette dargestellt.

Aus diesem OpenDesign-Leitfaden

Unterstützende Spezifikation lesen

Ein kleines, explizites Anwendungsthema

Die Einrichtung verwendet Arial als Anwendungsentscheidung für die Schrift und wiederholt die dokumentierten Marken- und Fokusfarben der Basis. Alle übrigen Komponentenregeln übernehmen die Werte von Grommet. Ein echtes HPE-Produkt kann stattdessen das freigegebene hpe-Thema übergeben. Prüfe anschließend Abstände und Typografie, da Themenüberschreibungen die hier aufgeführten Basiswerte ändern können.

Unterstützende Spezifikation lesen

HPE Grommet-Designsystem: Themenskalen können sich an einem Breakpoint ändern

Benannte Werte sind responsive Entscheidungen

Der Basisgenerator beginnt bei 24 Pixeln. Der standardmäßige mittlere Randabstand beträgt 24px, am kleinen Breakpoint wird der mittlere Abstand jedoch auf 12px reduziert. Das responsive Padding einer Box kann daher kleiner werden, obwohl im JSX weiterhin medium steht. Betrachte Skala und Breakpoint-Anpassung gemeinsam; behaupte nicht, medium entspreche immer vierundzwanzig Pixeln.

Unterstützende Spezifikation lesen

Verwende Box für das tatsächliche Layout

Der Planer verwendet eine Spalten-Box als Seite sowie eine responsive Zeilen-/Spalten-Box für das Formular und die Kapazitätsübersicht. Das untergeordnete Formular kann wachsen, während die Übersicht eine sinnvolle Mindestbreite beibehält. Auf kleinen Bildschirmen folgt das Diagramm auf die Steuerelemente und entspricht damit der Dokumentreihenfolge.

Unterstützende Spezifikation lesen

HPE Grommet-Designsystem: Eine bewusst festgelegte, gut lesbare Basis

Schriftgröße und Zeilenhöhe sind separate Themenwerte

Der Basisgenerator leitet aus seinem Abstandsparameter eine Schriftgröße von achtzehn Pixeln mit einer Zeilenhöhe von vierundzwanzig Pixeln ab. Das Beispiel verwendet dieses Wertepaar explizit mit Arial, um nicht den Eindruck zu erwecken, eine proprietäre Markenschrift sei heruntergeladen worden. Überschriften verwenden Grommet Heading und Text verwendet Text. So kann das Thema ihre Rollen festlegen, statt dass Komponenteninternes in CSS nachgebildet wird.

Unterstützende Spezifikation lesen

HPE Grommet-Designsystem: Ein einzelnes kontrolliertes Reservierungsobjekt

Feldnamen verknüpfen Felder mit dem Formular

Form verwaltet die abgestimmte Formularvereinbarung. Beim kontrollierten Muster gehören value und onChange der aufrufenden Komponente. Der name-Wert jedes FormField und Eingabefelds gibt den zugehörigen Schlüssel im Wertobjekt an. Unser Reservierungsobjekt enthält name und pool. Der Kapazitätsregler wird als separate Zahl gehalten, da er bereits vor dem Absenden ein Live-Diagramm steuert.

Unterstützende Spezifikation lesen

Validiere den Reservierungsnamen

Unterstützende Spezifikation lesen

HPE Grommet Select im Grommet-Designsystem hat ein eigenes Ereignisformat

Mit Zeichenfolgen bleibt der einfache Fall vorhersehbar

Die Pooloptionen im Beispiel sind Production und Development. Der kontrollierte Wert ist daher eine Zeichenfolge. Wenn Sie zu Objektoptionen wechseln, legen Sie labelKey und optional valueKey mit reduce fest und halten Sie den gespeicherten Wert mit dieser Auswahl konsistent. Select onChange liefert ein Wert-/Optionsobjekt, anders als das Ereignis der nativen Range-Eingabe.

Unterstützende Spezifikation lesen

Suche und das Laden von Optionen sind Aufgaben der Anwendung

Select kann ein Suchfeld anzeigen, wenn onSearch übergeben wird. Diese Prop bedeutet nicht, dass jede Option automatisch gefiltert wird. Halten Sie die ungefilterte Quellsammlung separat vor, damit sie nach dem Schließen oder Leeren der Suche wiederhergestellt werden kann. Im Beispiel wird die Suche für zwei Pools bewusst weggelassen.

Unterstützende Spezifikation lesen

HPE Grommet Ein Meter im Grommet-Designsystem benötigt Einheiten und einen Nenner

Kapazität statt eines unerklärten Prozentwerts darstellen

Meter erhält den voraussichtlichen Verbrauch und max=100. In diesem beispielhaften Planer sind im Beispielpool bereits 35 Einheiten belegt; die vorgeschlagene Reservierung reicht von 5 bis 60. Der Prozentwert entspricht zufällig der Zahl, weil der Nenner der Demonstration einhundert beträgt. Der Code übergibt max dennoch explizit, damit der Datenvertrag auch bei einer anderen Gesamtkapazität gilt.

Unterstützende Spezifikation lesen

Diagramm und Text synchron halten

Der Kreis, die Beschriftung des voraussichtlichen Verbrauchs und die verbleibenden Einheiten werden aus demselben numerischen Sliderwert abgeleitet. Die native RangeInput gibt ein DOM-Ereignis aus. Wandeln Sie event.target.value daher vor Berechnungen mit Number in eine Zahl um. Andernfalls kann die Addition einer Zeichenfolge zu fünfunddreißig ein plausibel wirkendes, aber falsches Ergebnis liefern.

Unterstützende Spezifikation lesen

HPE Grommet Dokument-Scrolling und ein Layout für schmale Bildschirme im Grommet-Designsystem

Für diese Seite full="min" wählen

Grommet full=true ist für Anwendungen gedacht, die den Viewport und das innere Scrolling selbst steuern. Dieser Planer verwendet full="min", damit das Dokument wachsen kann. So werden das Formular und seine Validierungsmeldung auf einem Smartphone nicht in einem Container mit fester Höhe eingeschlossen.

Unterstützende Spezifikation lesen

ResponsiveContext innerhalb von Grommet auslesen

Eine untergeordnete Komponente liest den aktuellen Kontext aus und wählt für kleine Bildschirme column, andernfalls row. Der Provider muss diese Komponente umschließen, damit ihr Kontext das gewählte Theme widerspiegelt. Bei geringer verfügbarer Breite bleibt das Layout als Fallback eine natürliche Spalte.

  • Die Feldbeschriftungen oberhalb der Eingabefelder platzieren.
  • Die Kapazitätsübersicht in der Quellreihenfolge nach den Steuerelementen platzieren.
  • Die Aktionszeile umbrechen lassen, ohne Validierungstext auszublenden.

Unterstützende Spezifikation lesen

HPE Grommet Beschriftung, Fehler und Messwerte im Grommet-Designsystem verknüpfen

Jeder numerischen Anzeige eine Bedeutung geben

Das Range-Steuerelement hat eine dauerhafte Beschriftung und eine sichtbare Einheit. Der Kreis erhält einen a11yTitle mit dem voraussichtlichen Verbrauch und der Gesamtkapazität. Ein benachbarter Text zeigt dieselben Zahlen an, sodass die Information nicht allein von einem farbigen Bogen abhängt. Der Fehlertext benennt das Problem mit der Reservierung und bleibt neben dem zugehörigen Feld.

Unterstützende Spezifikation lesen

Das lokale Ergebnis klar kenntlich machen

  1. Senden Sie das Formular mit leerem Namensfeld ab und prüfen Sie die Fehlermeldung für das Pflichtfeld.
  2. Geben Sie einen Namen ein, wählen Sie einen Pool und passen Sie die Zuteilung an.
  3. Bereiten Sie den Plan vor und prüfen Sie, ob die lokale Momentaufnahme den ausgewählten Pool und die Einheiten als Zahl enthält.

Unterstützende Spezifikation lesen

HPE Grommet Designsystem Eine vollständige Grommet-Komposition einbinden

Framework und zugehöriges Styling-Peer-Paket installieren

Installieren Sie grommet mit styled-components und der Laufzeit React in einem Clientprojekt. Richten Sie Grommet ein und binden Sie anschließend eine untergeordnete Komponente mit ResponsiveContext, ein kontrolliertes Form, FormField/TextInput/Select, RangeInput und Meter ein. Verwenden Sie bei Button label statt children, damit das standardmäßige Verhalten der beschrifteten Schaltfläche explizit bleibt.

Unterstützende Spezifikation lesen

HPE Grommet Designsystem Komponentenbeispiele

Vollständige, eigenständige interaktive Demo

Speichern Sie das vollständige Dokument als index.html und öffnen Sie es in einem Browser. Unabhängige Interpretation von Basismaßen und -farben von HTML/CSS mit explizit gewählter Arial-Schrift; nicht das separate HPE-Theme.

html
<!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>

Code-Referenz

  • Die Kapazitätsberechnungen verwenden den angezeigten Beispielpool. Das eigenständige Layout ist unabhängig HTML; das native Beispiel verwendet das Basis-Theme von Grommet und nicht das separate HPE-Theme.

Vollständiger Einstieg für die native Implementierung

Die vollständige Implementierung aus dem Setup, hier zusammen mit den gezielten Erläuterungen zu API zusammengestellt. Beachte die in den Setup-Anweisungen dokumentierten Voraussetzungen für Pakete und Builds.

jsx
// 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>);

Code-Referenz

  • Clientseitige main.jsx für ein Projekt mit einem Root-Element. Basis-Theme von Grommet mit explizit deklarierter Schriftart und Markenüberschreibung der Anwendung. Es wird nicht stillschweigend ein HPE-Theme vorausgesetzt. API anhand der offiziellen Dokumentation geprüft; die native Kompilierung wurde hier nicht verifiziert.

Bewusst zum HPE-Branding-Theme wechseln

Verwenden Sie das separate Paket nur, wenn dies dem beabsichtigten Designziel entspricht; prüfen Sie die Werte anhand der installierten Version erneut.

jsx
// 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>

Code-Referenz

  • Die obige Referenztabelle beschreibt das Basis-Theme, nicht diese optionale Überschreibung.

Select-Werte für Objekte

Eine Pool-ID speichern und das zugehörige Label anzeigen.

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

Code-Referenz

  • poolId/setPoolId mit useState in der aufrufenden Komponente deklarieren.
  • Wenn reduce aktiviert ist, wird die ID statt des Objekts gespeichert.
04

HPE Grommet Einrichtung des KI-Agenten für das Grommet-Designsystem

Ausgangspunkt für die Implementierung

Clientseitige main.jsx für ein Projekt mit einem Root-Element. Basis-Theme von Grommet mit explizit deklarierter Schriftart und Markenüberschreibung der Anwendung. Es wird nicht stillschweigend ein HPE-Theme vorausgesetzt. API anhand der offiziellen Dokumentation geprüft; die native Kompilierung wurde hier nicht verifiziert.

jsx
// 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>);

Ein Prompt für dein Projekt

Agenten-Prompt
Implementieren Sie den bereitgestellten Reservierungsplaner mit dem Basis-Theme von Grommet, einem kontrollierten Form, benannten FormFields, Select, RangeInput und einem Meter mit explizitem max. Halten Sie die Werte des Basis-Themes von grommet-theme-hpe getrennt. Wandeln Sie den Sliderwert in eine Zahl um, zeigen Sie Einheiten an, validieren Sie den Namen und erstellen Sie ausschließlich eine lokale Plan-Momentaufnahme.
05

HPE Grommet Designsystem Quellen und Geltungsbereich

Unabhängige Implementierungsreferenz für das Basis-Theme von Grommet. Die Verwendung des HPE-Branding-Themes wird separat gezeigt. Die Kapazitätswerte sind fiktive lokale Daten, keine Infrastrukturmetriken oder Angaben zur Bereitstellung.