English
Français

Blog of Denis VOITURON

for a better .NET world

FluentUI.Blazor v4.5

Posted on 2024-03-08

Vue d’ensemble

Nous venons de publier une nouvelle version 4.5 de Microsoft.FluentUI.AspNetCore.Components. Cette version corrige certains bugs détectés ces derniers jours, mais ajoute également quelques nouvelles fonctionnalités.

Nouvelles fonctionnalités

AppBar component

Basé sur le travail effectué par l’équipe .NET Aspire (cette bibliothèque alimente le tableau de bord .NET Aspire !) un nouveau composant FluentAppBar a été ajouté. L’AppBar affiche les AppBarItems de manière verticale comme dans Teams et le (nouveau) Outlook. Il affiche automatiquement ... en bas lorsque le nombre d’applications est supérieur à l’espace vertical disponible. Vous pouvez contrôler si ce popover affiche une barre de recherche ou non.

AppBar

Site de démonstration : Recherche de composants

Avec près de 70 composants dans la bibliothèque, il est parfois difficile de trouver la bonne documentation et la bonne page d’exemple. Pour vous aider à naviguer sur le site, nous avons ajouté une fonction de recherche de composants dans l’en-tête (en mode bureau uniquement).

DemoSearch

Grid : Espacement et marges

La grille FluentGrid devenait plus large lorsque la valeur du paramètre Spacing était augmentée. Ceci a été corrigé.

Before GridBefore

After GridAfter

Les composants Menu et Popover utilisent en interne le composant AnchoredRegion pour “attacher” leur rendu à un autre élément. Le composant AnchoredRegion expose les paramètres VerticalThershold et HorizontalThreshold pour définir l’espace minimum nécessaire au rendu de l’attachement à l’emplacement préféré. Cela permet de créer un “reflow” automatique au cas où il n’y aurait pas assez d’espace disponible.

DataGrid : Propriété filtrée et indicateur visuel

Lors de l’utilisation de plusieurs filtres dans une grille de données, il n’était pas facile de voir si un filtre était appliqué à une colonne spécifique. Une icône FilterDismiss sera désormais affichée lorsqu’un filtre est appliqué sur une colonne.

GridFilter

Un FluentOverlay a été ajouté pour qu’un clic en dehors du menu le ferme. Un paramètre ButtonAppearance a été ajouté pour permettre de changer l’apparence du bouton. Des exemples ont été ajoutés au site de démonstration pour le montrer.

MenuClosed

Card : Paramètre MinimalStyle

Par défaut, le composant FluentCard est un conteneur visuel et un fournisseur de système de conception. Les cartes sont des instantanés de contenu qui sont typiquement utilisés dans un groupe pour présenter des collections d’informations liées. Ainsi, par conception, le composant FluentCard inclut tous les styles requis pour une bonne représentation des autres composants inclus. Cela ajoute un grand nombre de styles tels que justify-content; align-items; gap; width; et plus de 80 autres variables CSS. La quantité de code générée peut devenir assez importante, surtout si vous utilisez ce composant plusieurs fois, par exemple dans une grande liste.

Pour éviter cela, vous pouvez désormais utiliser le paramètre MinimalStyle. Cela supprimera tous les styles par défaut du composant FluentCard et appliquera un ensemble de styles courants à travers un CSS isolé. Cela vous permettra d’utiliser le composant FluentCard comme un simple conteneur avec seulement les styles nécessaires pour dessiner l’ombre de la boîte (et quelques autres règles de style requises).

<FluentCard MinimalStyle="true">
    <p>Just some content in a card (with a button that does not do anything).</p>

    <FluentButton Appearance="Appearance.Accent">Hello</FluentButton>
    <p>No Width or Height has been specified.</p>
</FluentCard>

CardMinimalStyle

Code généré:

<div class="fluent-card-minimal-style">
  <p>Just some content in a card (with a button that does not do anything).</p>
  <fluent-button type="button" appearance="accent" class="accent">Hello</fluent-button>
  <p>No Width or Height has been specified.</p>
</div>

Sans ce paramètre MinimalStyle

<div style="justify-content: start; align-items: start; gap: 10px; width: 100%; --neutral-layer-card-container: #f3f3f3; --neutral-layer-floating: #ffffff; --neutral-layer-1: #fbfbfb; --neutral-layer-2: #f3f3f3; --neutral-layer-3: #ebebeb; --neutral-layer-4: #e0e0e0; --fill-color: #fbfbfb; --accent-fill-rest: #286cbd; --accent-fill-hover: #2b75c7; --accent-fill-active: #3482d2; --accent-fill-focus: #286cbd; --accent-foreground-rest: #163d89; --accent-foreground-hover: #102f79; --accent-foreground-active: #2462b2; --accent-foreground-focus: #163d89; --accent-stroke-control-rest: linear-gradient(#3e7bc4 90%, #1c4b82 100%); --accent-stroke-control-hover: linear-gradient(#3e81cc 90%, #1f538d 100%); --accent-stroke-control-active: #468dd6; --accent-stroke-control-focus: linear-gradient(#3e7bc4 90%, #1c4b82 100%); --neutral-fill-rest: #ffffff; --neutral-fill-hover: #f7f7f7; --neutral-fill-active: #fbfbfb; --neutral-fill-focus: #fbfbfb; --neutral-fill-input-rest: #ffffff; --neutral-fill-input-hover: #f7f7f7; --neutral-fill-input-active: #fbfbfb; --neutral-fill-input-focus: #ffffff; --neutral-fill-input-alt-rest: #f3f3f3; --neutral-fill-input-alt-hover: #ebebeb; --neutral-fill-input-alt-active: #e0e0e0; --neutral-fill-input-alt-focus: #f3f3f3; --neutral-fill-layer-rest: #ffffff; --neutral-fill-layer-hover: #ffffff; --neutral-fill-layer-active: #ffffff; --neutral-fill-layer-alt-rest: #ffffff; --neutral-fill-secondary-rest: #efefef; --neutral-fill-secondary-hover: #f3f3f3; --neutral-fill-secondary-active: #f7f7f7; --neutral-fill-secondary-focus: #efefef; --neutral-fill-stealth-rest: #fbfbfb; --neutral-fill-stealth-hover: #efefef; --neutral-fill-stealth-active: #f3f3f3; --neutral-fill-stealth-focus: #fbfbfb; --neutral-fill-strong-rest: #717171; --neutral-fill-strong-hover: #4b4b4b; --neutral-fill-strong-active: #868686; --neutral-fill-strong-focus: #717171; --neutral-foreground-rest: #1a1a1a; --neutral-foreground-hover: #7a7a7a; --neutral-foreground-active: #a8a8a8; --neutral-foreground-focus: #1a1a1a; --neutral-foreground-hint: #717171; --neutral-stroke-rest: #d6d6d6; --neutral-stroke-hover: #c6c6c6; --neutral-stroke-active: #e0e0e0; --neutral-stroke-focus: #d6d6d6; --neutral-stroke-control-rest: linear-gradient(#efefef 90%, #d6d6d6 100%); --neutral-stroke-control-hover: linear-gradient(#e5e5e5 90%, #cecece 100%); --neutral-stroke-control-active: #e5e5e5; --neutral-stroke-control-focus: linear-gradient(#e5e5e5 90%, #cecece 100%); --neutral-stroke-divider-rest: #ebebeb; --neutral-stroke-input-rest: linear-gradient(#efefef calc(100% - 1px), #929292 calc(100% - 1px), #929292); --neutral-stroke-input-hover: linear-gradient(#e5e5e5 calc(100% - 1px), #8a8a8a calc(100% - 1px), #8a8a8a); --neutral-stroke-input-active: #e5e5e5; --neutral-stroke-input-focus: linear-gradient(#e5e5e5 calc(100% - 1px), #8a8a8a calc(100% - 1px), #8a8a8a); --neutral-stroke-layer-rest: #efefef; --neutral-stroke-layer-hover: #efefef; --neutral-stroke-layer-active: #efefef; --neutral-stroke-strong-rest: #636363; --neutral-stroke-strong-hover: #636363; --neutral-stroke-strong-active: #636363; --neutral-stroke-strong-focus: #636363; --neutral-fill-inverse-rest: #131313; --neutral-fill-inverse-hover: #272727; --neutral-fill-inverse-active: #000000; --neutral-fill-inverse-focus: #131313; --neutral-fill-stealth-rest-on-neutral-fill-layer-rest: #ffffff; --neutral-fill-stealth-hover-on-neutral-fill-layer-rest: #f3f3f3; --neutral-fill-stealth-active-on-neutral-fill-layer-rest: #f7f7f7; --input-placeholder-rest: #767676; --input-placeholder-hover: #717171; --input-filled-placeholder-rest: #6c6c6c; --input-filled-placeholder-hover: #6c6c6c; --clear-button-hover: #f3f3f3; --clear-button-active: #f7f7f7; --tree-item-expand-collapse-hover: #e0e0e0; --tree-item-expand-collapse-selected-hover: #e0e0e0;">
  <fluent-card style="--card-width: 300px; --card-height: 300px;">
    <p>Just some content in a card (with a button that does not do anything).</p>
    <fluent-button type="button" appearance="accent" class="accent">Hello</fluent-button>
    <p>No Width or Height has been specified.</p>
  </fluent-card>
  </div>

Tooltip : Comportement additionnel

Nous avons ajouté un paramètre HideTooltipOnCursorLeave au composant FluentTooltip. Vous pouvez maintenant choisir d’utiliser le comportement par défaut :

ou d’utiliser un nouveau comportement :

HideTooltipOnCursorLeave="false" (ou sans attribut)

TooltipBefore

HideTooltipOnCursorLeave="true"

TooltipAfter

Le comportement peut également être défini par le biais de la configuration globale :

builder.Services.AddFluentUIComponents(configuration =>
{
    configuration.HideTooltipOnCursorLeave = true;
});

Icons

Nous avons également mis à jour la bibliothèque d’icônes en y intégrant une vingtaine de nouvelles illustrations.

Corrections diverses

Le reste des corrections et des changements pour cette version est (à nouveau) une liste assez longue. Nous vous renvoyons à la page What’s new sur le site de la documentation pour une vue d’ensemble complète (y compris les liens vers les problèmes et les demandes de modifications sur GitHub).

Templates

Nous avons mis à jour les modèles afin d’intégrer les dernières corrections apportées aux composants. Nous avons également corrigé un problème qui apparaissait lorsque des fournisseurs externes étaient utilisés pour l’authentification.

Installez le Modèle Visual Studio en utilisant ce lien.

Preview NuGet Feed

Si vous voulez être à la pointe du progrès et suivre ce que nous construisons, nous avons un flux disponible qui héberge les paquets pour la bibliothèque de base qui sont construits à chaque livraison que nous faisons sur la branche dev. L’adresse du flux est https://pkgs.dev.azure.com/fluent-blazor/public/_packaging/previews/nuget/v3/index.json

Il ne s’agit pas d’un flux à utiliser en production. Ce flux est directement lié à notre branche Développement. Il est donc possible (probable) que certains Packages causent des problèmes pendant quelques heures, le temps de les détecter et les corriger.

Web sites

Feedback

Si vous trouvez quelque chose qui sort de l’ordinaire, faites-le nous savoir dans le repo sur GitHub, ou Twitter / X.

Langues

EnglishEnglish
FrenchFrançais

Suivez-moi

Articles récents