Metric

Affiche un indicateur avec un libellé, une valeur et un delta optionnel (variation positive/négative).

Signature

import { Metric } from './bpm';

<Metric
  label={string}
  value={number|string}
  delta={number|undefined}
  deltaType="normal" | "inverse"
  deltaDecimals={number}
  currency={string}
  help={string|null}
/>

Parameters

ParameterTypeDefaultDescription
labelstrTitre ou en-tête de la métrique.
valuenumber, string, or NoneValeur affichée. null ou non défini est rendu comme un tiret long.
deltanumber or NoneVariation affichée avec une flèche (▲ si positif, ▼ si négatif). Couleur selon deltaType. Si null, pas de flèche.
deltaTypestr"normal""normal" : positif = vert, négatif = rouge. "inverse" : positif = rouge, négatif = vert (ex. coûts).
deltaDecimalsnumber0Nombre de décimales pour l'affichage du delta.
currencystr"EUR"Symbole pour le delta (EUR, USD, GBP, JPY, CHF, CAD, AUD). Chaîne vide pour un pourcentage.
helpstr or NonenullInfo-bulle affichée à côté du libellé (icône ⓘ).

Examples

Example 1: Afficher une métrique

<Metric label="Valorisation" value={12345.67} delta={+250.5} currency="EUR" />

Example 2: Plusieurs métriques côte à côte

import { Metric } from './bpm';

<div style={{ display: 'flex', gap: '1rem', flexWrap: 'wrap' }}>
  <Metric label="Valorisation" value={valorisation} delta={deltaVal} currency="EUR" />
  <Metric label="Positions" value={nbPositions} />
  <Metric label="Valeur nette" value={valeurNette} delta={deltaNet} currency="EUR" />
</div>

Example 3: Inverser la couleur du delta

Pour un indicateur où une baisse est positive (ex. coût), utilisez deltaType="inverse".

<Metric
  label="Coût"
  value={4200}
  delta={-150}
  deltaType="inverse"
  currency="EUR"
/>

Button

Bouton avec variantes (primary, secondary, danger) et tailles (small, medium, large).

Signature

import { Button } from './bpm';

<Button
  onClick={function}
  variant="primary" | "secondary" | "danger"
  size="small" | "medium" | "large"
  disabled={boolean}
  fullWidth={boolean}
  type="button" | "submit"
>
  {children}
</Button>

Parameters

ParameterTypeDefaultDescription
variantstr"primary"primary : accent. secondary : neutre. danger : suppression.
sizestr"medium"small, medium, large.
disabledboolfalseDésactive le bouton.
fullWidthboolfalseLe bouton occupe toute la largeur disponible.
typestr"button"type HTML : button ou submit.

Examples

Example 1: Bouton primary

<Button onClick={() => save()} variant="primary">Enregistrer</Button>

Example 2: Bouton danger et small

<Button onClick={() => confirmDelete()} variant="danger" size="small">Supprimer</Button>

Selectbox

Liste déroulante avec options, label, aide et placeholder. Gère le clic extérieur et Escape.

Signature

import { Selectbox } from './bpm';

<Selectbox
  label={string}
  options={Array<{ value, label }>}
  value={any}
  onChange={function}
  placeholder="Sélectionner..."
  disabled={boolean}
  required={boolean}
  help={string|null}
/>

Parameters

ParameterTypeDefaultDescription
labelstrLibellé au-dessus du champ.
optionsarray[]Tableau d’objets { value, label }.
valueanyValeur sélectionnée (contrôlée).
onChangefunctionAppelé avec la nouvelle valeur lors du changement.
placeholderstr"Sélectionner..."Texte affiché quand aucune valeur n’est sélectionnée.
disabledboolfalseDésactive le select.
helpstr or nullnullInfo-bulle ou texte d’aide.

Examples

Example 1: Liste simple

<Selectbox
  label="Devise"
  options={[{ value: 'EUR', label: 'Euro' }, { value: 'USD', label: 'Dollar' }]}
  value={currency}
  onChange={setCurrency}
/>

Table

Tableau triable. Colonnes avec key, label, optionnellement align. Données = tableau d’objets.

Signature

import { Table } from './bpm';

<Table
  columns={Array<{ key, label, align? }>}
  data={Array<object>}
  striped={boolean}
  hover={boolean}
  onRowClick={function}
  defaultSortColumn={string|null}
  defaultSortDirection="asc" | "desc"
  name={string|null}
  keyColumn={string|null}
/>

Parameters

ParameterTypeDefaultDescription
columnsarray{ key, label, align? }. key utilisé pour le tri si présent.
dataarrayLignes (objets). Les clés doivent correspondre aux key des colonnes.
stripedbooltrueLignes alternées.
hoverbooltrueSurbrillance au survol.
onRowClickfunctionAppelé avec la ligne (row) au clic.
defaultSortColumnstr or nullnullColonne de tri initiale.
defaultSortDirectionstr"asc"asc ou desc.

NumberInput

Champ numérique avec label, min/max/step, aide. Contrôlé ou non contrôlé.

Signature

<NumberInput label="Montant" value={n} onChange={setN} min={0} max={100} step={1} disabled={false} help={null} />

Parameters

ParameterTypeDefaultDescription
labelstrLibellé.
valuenumberValeur (contrôlée).
onChangefunctionAppelé avec la nouvelle valeur (number ou string en mode contrôlé).
min, max, stepnumber or nullnull, null, 1Contraintes et pas.
disabledboolfalseDésactive le champ.
helpstr or nullnullInfo-bulle.

DateInput

Sélecteur de date (type date) avec label, min/max et aide.

Signature

<DateInput label="Date" value={date} onChange={setDate} min={minDate} max={maxDate} disabled={false} />

Parameters

ParameterTypeDefaultDescription
labelstrLibellé.
valueDate or stringValeur (objet Date ou chaîne ISO).
onChangefunctionAppelé avec Date ou null.
min, maxDate or stringnullBornes du sélecteur.

ColorPicker

Sélecteur de couleur (input color) avec label et valeur hex.

Signature

<ColorPicker label="Couleur" value={color} onChange={setColor} disabled={false} help={null} />

Parameters

ParameterTypeDefaultDescription
labelstrLibellé.
valuestr"#000000"Couleur hexadécimale.
onChangefunctionAppelé avec la nouvelle valeur hex.

Tabs

Onglets avec contenu. tabs = tableau de { label, content } ou de strings.

Signature

<Tabs tabs={[{ label: 'A', content: <p>Contenu A</p> }, { label: 'B', content: <p>Contenu B</p> }]} defaultTab={0} onChange={(index) => {}} />

Parameters

ParameterTypeDefaultDescription
tabsarray[]{ label, content } ou string (label seul).
defaultTabnumber0Index de l’onglet actif au montage.
onChangefunctionAppelé avec l’index lors du changement d’onglet.

Message

Bloc de message avec type info, success, warning ou error.

Signature

<Message type="info" | "success" | "warning" | "error">{children}</Message>

Toast

Notifications toast. Envelopper l’app avec ToastProvider et utiliser le hook useToast().

Signature

import { ToastProvider, useToast } from './bpm';

// À la racine
<ToastProvider>{children}</ToastProvider>

// Dans un composant
const { showToast } = useToast();
showToast(message, type, duration, title, pageName, pageIcon);

Spinner

Indicateur de chargement avec texte optionnel et tailles small, medium, large.

Signature

<Spinner text="Chargement..." size="medium" | "small" | "large" />

Tooltip

Infobulle (MUI). text = contenu, position = top, bottom, left, right, top-start, etc.

Signature

<Tooltip text="Explication" position="top"><span>Survoler</span></Tooltip>

Title

Titre avec niveaux 1–4. Niveau 1 affiche le logo (optionnel onLogoClick). Exporte Title1, Title2, Title3, Title4.

Signature

<Title level={1|2|3|4} onLogoClick={function|null}>{children}</Title>
// ou
<Title1>Mon écran</Title1>
<Title2>Sous-titre</Title2>

Panel

Panneau informatif (alertes, états). Variantes : info, warning, error, success.

Signature

<Panel variant="info" | "warning" | "error" | "success" title="Titre" icon={node|false}>{children}</Panel>

Box

Bloc avec titre, statut, détails. Optionnel isConnected pour style vert/rouge.

Signature

<Box title="Connexion" status="..." details="..." isConnected={boolean} actions={node} />

Expander

Bloc repliable avec titre. defaultExpanded pour ouvrir par défaut.

Signature

<Expander title="Détails" defaultExpanded={false}>{children}</Expander>