Composants / cmpCalendar

Composant Power Apps Canvas

cmpCalendar.

v1.0.0

Bien plus qu'un simple date picker.

Ce composant a été conçu avec un objectif clair : offrir une personnalisation complète grâce à un large éventail d'options, tout en offrant un rendu professionnel. Multilingue, facilement thémable, avec gestion des horaires et de nombreuses fonctionnalités avancées, il met toute la flexibilité dont vous avez besoin à portée de main.

Canvas component Source YAML Multilingue Thème Tous supports

Aperçu

Bien plus qu'un sélecteur de date

Concrètement, cmpCalendar affiche le contexte autour de la date (la semaine, les événements, les jours à éviter) : une véritable lentille de planning. Côté technique, c'est du Power Apps Canvas pur, validé sur le schéma pa.yaml v3.0 officiel de Microsoft, sans aucune dépendance aux contrôles modernes.

Une table = une fonctionnalité

Le composant suit un principe simple : on enrichit l'affichage en passant des tables (Markers, Events, Languages, Theme) plutôt qu'en multipliant les booléens. Une seule table Markers remplace ainsi fériés, surbrillances et blocages.

Fonctionnalités phares

Ce que cmpCalendar sait faire

Chaque fonctionnalité correspond à une propriété que vous réglez sur le composant.

Rail des semaines : ISO ou US

Deux systèmes au choix via WeekNumbering : ISO 8601 (méthode du jeudiRègle ISO 8601 : une semaine appartient à l'année où tombe son jeudi. La semaine 1 est donc celle qui contient le premier jeudi de l'année. Résultat : à cheval sur deux années, le numéro reste juste.) ou nord-américain (la semaine 1 est celle qui contient le 1er janvier). Cliquer un numéro sélectionne ou étend toute la semaine.

3 modes de sélection

Simple, plage (range) ou multiple, avec désélection au re-clic via AllowEmptySelection.

Pastilles d'événements

Jusqu'à MaxDots (plafond 3) pastilles colorées par jour (table Events) qui s'empilent sous la date.

Dates spéciales définies par une table

Une table Markers unique : chaque ligne porte sa couleur, son style (fond plein ou anneau), un libellé et un flag « bloqué ».

En-tête contextuel

Mois/année, chips (semaine, trimestre, jour de l'année), ligne « date sélectionnée » consciente du mode, bouton Aujourd'hui.

Double-mois

Deux mois côte à côte, chacun avec son rail des semaines ; la sélection est partagée et une plage s'étend sur les deux.

Forme des indicateurs

La sélection et le rail des semaines passent du cercle au carré arrondi via SelectionRadius et RailRadius.

Sélection d'heure

Un champ HH : MM qui ouvre une galerie heures/minutes en popup - 12 h (AM/PM) ou 24 h, pas des minutes réglable, heure de début et de fin. Les sorties deviennent de vrais DateTime.

Multilingue intégré

20 langues fournies dans la table Languages (EN, FR, DE, ES, IT, PT, NL, RU, et plus), sélectionnables dans le configurateur. Extensible par une simple ligne.

Densité & dimensionnement

Mode confort ou compact : le compact réduit la taille des cellules, sans jamais masquer de ligne. La hauteur s'adapte au mois affiché (4 à 6 semaines, jamais de semaine vide en trop) ; le composant se dimensionne à partir de ses constantes et expose sa hauteur via ComponentHeight pour ajuster le conteneur hôte.

Légende automatique

Elle n'affiche que ce qui est réellement présent à l'écran : la pastille « Sélection » apparaît dès qu'une date est choisie, « Bloqué » seulement s'il y a des jours bloqués visibles. Rien à gérer, et les libellés sont traduisibles.

Thème clair / sombre

Bascule clair/sombre via DarkMode, et chaque couleur (fond, texte, sélection, jour actuel, survol, bordures…) se redéfinit dans la table Theme - deux schémas « Light » et « Dark » entièrement personnalisables.

Aperçu interactif

Générez votre YAML sur mesure

Ajustez les réglages : l'aperçu se met à jour en direct (mois de démonstration : juillet 2026) et le YAML complet du composant est généré sous le configurateur, vos réglages injectés comme valeurs par défaut, prêt à committer ou packer.

Mode d'emploi

Récupérer vos données, pas à pas

Indiquez le nom de votre instance et le séparateur de votre Power Apps Studio : les formules ci-dessous s'adaptent et suivent le mode choisi dans l'aperçu interactif. Copiez, collez dans la propriété indiquée, c'est prêt.

Propriétés du composant

Entrées, sorties & événements

Toutes les valeurs par défaut sont en anglais et entièrement surchargeables. Les types suivent la nomenclature Power Fx.

Entrées : disposition (seule source de dimensionnement)

Disposition
NomTypeDéfautRôle
CellWNumber41Largeur d'une cellule de jour.
CellHNumber40Hauteur d'une ligne de semaine.
WeekColWNumber40Largeur du rail des numéros de semaine. Mettre 0 pour le masquer.
HeaderHNumber36Hauteur de la ligne d'en-tête des jours.

Entrées : données

Données
NomTypeSchéma de ligneRôle
MarkersTable{ Date, Label, Color, AsBackground, Block }Jours particuliers colorés sur la grille (jours fériés, mises en avant, dates bloquées). Un même jour peut avoir plusieurs lignes, dont les valeurs Label s'empilent (séparées par un retour à la ligne) dans son infobulle, mais seule la première ligne correspondante détermine la couleur et décide si le jour est dessiné en disque plein ou en simple contour (AsBackground). Le jour devient non sélectionnable dès que Block vaut true sur l'une de ses lignes. Les colonnes sont Date, Label, Color, AsBackground et Block.
EventsTable{ Date, Color }Petits points colorés sous le numéro du jour, chaque ligne en ajoutant un. Les lignes tombant sur la même date se cumulent jusqu'à un maximum de trois points ; pousser MaxDots au-delà de 3 ne change donc rien à l'écran.

Entrées : sélection

Sélection
NomTypeChampsRôle
SelectionRecord{ DefaultDate, DefaultEndDate, DefaultSelection, MinDate, MaxDate }Valeurs de sélection par défaut et contraintes de dates.
Chaque champ de Selection ne sert que dans un mode. DefaultDate est la date pré-sélectionnée en mode simple (et le mois sur lequel le calendrier s'ouvre) ; DefaultEndDate la fin de plage pré-sélectionnée en mode plage ; DefaultSelection les dates pré-cochées en mode multiple, sous forme de table de lignes { Value } (même forme que la sortie SelectedDates). MinDate et MaxDate bornent les dates atteignables.

Le défaut DefaultSelection: Table({ Value: Date(1899, 1, 1) }) est une sentinelle « rien de pré-coché » : une entrée de type table a besoin d'au moins une ligne pour fixer sa colonne Value, on y met donc une date volontairement antérieure à MinDate, que le composant ignore partout (elle n'apparaît jamais dans SelectedDates). Pour vraiment pré-cocher des dates, remplacez-la par de vraies dates, par exemple Table({ Value: Date(2026, 7, 3) }, { Value: Date(2026, 7, 10) }).

Entrées : comportement / affichage (Settings, Record)

Champs de Settings
ChampTypeDéfautRôle
FieldModeBooleanfalseAffichage réduit à un champ qui ouvre le calendrier si besoin.
SelectRangeBooleanfalseMode plage : choisir une date de début et de fin.
SelectMultipleBooleanfalseMode multi-sélection : choisir plusieurs dates isolées.
AllowEmptySelectionBooleantrueRecliquer sur le jour sélectionné pour le désélectionner.
DisableWeekendsBooleanfalseRend les samedis et dimanches non sélectionnables.
DualMonthBooleanfalseAfficher/masquer deux mois consécutifs côte à côte.
ShowHeaderBooleantrueAfficher/masquer la ligne d'en-tête (résumé de la sélection + pastilles trimestre/semaine/jour).
ShowFooterBooleantrueAfficher/masquer la barre de pied de page (Réinitialiser / Annuler / OK).
ShowLegendBooleantrueAfficher/masquer la légende des couleurs Sélection / Bloqué.
ShowWeekNumbersBooleantrueAfficher/masquer la colonne des numéros de semaine à gauche.
WeekNumberingText"iso"Choix du mode d'année : "iso" (ISO 8601, à partir du lundi) ou "us" (semaine 1 = semaine du 1er janvier).
FirstDayOfWeekText"Monday"Jour qui ouvre la semaine, de "Monday" à "Sunday".
ShowOutsideDaysBooleantrueAfficher/masquer les jours débordant des mois voisins.
ShowTodayButtonBooleantrueAfficher/masquer le bouton de raccourci « Aujourd'hui ».
ShowWeekChipBooleantrueAfficher/masquer la pastille de semaine courante (p. ex. Wk 28) dans l'en-tête.
ShowQuarterChipBooleantrueAfficher/masquer la pastille de trimestre (p. ex. Q3) dans l'en-tête.
ShowDayChipBooleantrueAfficher/masquer la pastille de jour de l'année (p. ex. D 190) dans l'en-tête.
DateFormatText"ddd dd mmm yyyy"Choix de l'affichage des dates affichées.
ShowTimeBooleanfalseAfficher/masquer le sélecteur d'heure hh:mm.
ShowEndTimeBooleanfalseAfficher/masquer le sélecteur d'heure de fin (visible seulement si ShowTime est actif).
Use24hBooleantrueChoix du mode d'heure : true = format 24 heures, false = format 12 heures AM/PM.
MinuteStepNumber1Intervalle entre les minutes proposées dans le sélecteur d'heure (1, 5, 15, …).
TodayStyleText"ring"Choix du style d'affichage du marquage d'aujourd'hui : "ring", "fill" ou "bold".
DensityText"comfortable"Choix affichage : "comfortable" (taille normale) ou "compact".
MaxDotsNumber3Nombre max de points d'événement par jour (max : 3).
SelectionRadiusNumber-1Rayon des coins du disque de sélection. Négatif = cercle/pilule complet.
RailRadiusNumber8Rayon des coins du surlignage de la colonne de semaine. Négatif : pilule complète.
MaxSelectionCountNumber0Nombre max de dates en multi-sélection (0 : illimité).
MaxRangeDaysNumber0Longueur max d'une plage en jours (0 : illimité).

Entrées : validation

Validation
NomTypeDéfautRôle
ConfirmDisabledBooleanfalseDésactive le bouton OK.

Entrées : localisation

Localisation
NomTypeDéfautRôle
LanguageText"en"Code de langue actif de l'interface. Il doit correspondre à un code de Languages (p. ex. "en", "fr", "es"). S'il est introuvable, on retombe sur la première ligne (anglaise) de Languages.
LanguagesTable20 languesTable de traduction intégrée, chaque langue est représentée par un enregistrement de la table. En prendre en charge une nouvelle revient à copier l'enregistrement, à traduire ses chaînes et à pointer Language sur le nouveau Code.
Colonnes d'une ligne Languages : Code, WeekdayNames ([...], toujours écrit lundi → dimanche, quel que soit le jour qui ouvre la semaine : c'est Settings.FirstDayOfWeek qui fait pivoter l'affichage et qui pioche dans cette liste, la réordonner ferait donc pivoter deux fois), MonthNames ([...]), Title, Confirm, Cancel, Reset, Today, Clear, NoSelection, LabelSelection / LabelRange (préfixe de la ligne de sélection), WeekColumnHeader, ChipWeek / ChipQuarter / ChipDay (+ leurs infobulles ChipWeekTip / ChipQuarterTip / ChipDayTip), LegendSelected / LegendBlocked, TimeStart / TimeEnd, les infobulles de navigation NavPrev / NavPrevLimit / NavNext / NavNextLimit, et les libellés TimeAm / TimePm (12 h).

Le motif de mise en forme des dates ne figure pas dans cette table : comme le jour qui ouvre la semaine, c'est un réglage d'affichage et non une traduction, il vit donc dans Settings.DateFormat. Le changer une fois vaut pour toutes les langues, et une langue ajoutée n'a pas à le redéclarer.

Entrées : thème

Thème
NomTypeDéfautRôle
DarkModeBooleanfalseChoix du thème actif. true sélectionne le schéma "Dark", false le schéma "Light".
ThemeTableLight, DarkLa palette de couleurs est répartie en deux enregistrements "Dark" et "Light". Les deux doivent être présents car chaque ligne porte l'ensemble des couleurs ainsi que les deux icônes iconPrev et iconNext.
Chaque ligne Theme : Scheme ("Light" / "Dark"), ColourContainer, ColourBackground, ColourTitle, ColourText, ColourNote, ColourLine, ColourSelection, ColourOnSelection, ColourToday, ColourButton, ColourHover, ColourPress, ColourAdjacent, ColourRange + glyphes iconPrev et iconNext.

Sorties

Sorties
NomTypeRôle
SelectedDateDateAndTimeLa date choisie en mode simple. Elle contient l'heure et la minute choisies quand le sélecteur d'heure est actif, sinon minuit.
SelectedStartDateDateAndTimePremier jour de la plage sélectionnée.
SelectedEndDateDateAndTimeFin de la plage sélectionnée.
SelectedDatesTableChaque jour choisi en mode multi-sélection, sous forme de table à une colonne (Value).
SelectedDateTextTextDate sélectionnée déjà mise en forme pour l'affichage (mode simple), suivant le motif Settings.DateFormat.
SelectedStartTimeTextL'heure de début seule, mise en forme hh:mm et suivant le paramètre Use24h. Les sélections simple, plage et multiple la renseignent toutes, et en mode multiple une seule heure de début couvre tout l'ensemble. Vide quand ShowTime est inactif ou que rien n'est sélectionné.
SelectedEndTimeTextL'heure de fin seule, mise en forme hh:mm et suivant le paramètre Use24h. Elle n'apparaît que si ShowTime et ShowEndTime sont tous deux actifs, avec une seule heure de fin partagée pour tout l'ensemble en mode multiple, sinon vide.
SelectedStartHourNumberHeure de début sous forme de nombre (0-23), pour les calculs de dates. Vide quand ShowTime est inactif ou que rien n'est sélectionné. Globale en mode multiple.
SelectedStartMinuteNumberLa partie minute de l'heure de début (0-59), qui se vide dans les mêmes conditions que SelectedStartHour. Partagée sur tout l'ensemble en mode multiple.
SelectedEndHourNumberHeure de fin sous forme de nombre (0-23). Renseignée uniquement tant que ShowTime et ShowEndTime sont actifs et que quelque chose est sélectionné. Partagée en mode multiple.
SelectedEndMinuteNumberMinute de fin (0-59), qui suit SelectedEndHour pour savoir quand elle se renseigne et quand elle se vide. Globale en mode multiple.
DisplayedMonthNumberMois actuellement affiché (1-12).
DisplayedYearNumberAnnée actuellement affichée.
ComponentHeightNumberHauteur rendue. La hauteur est dynamique (4 à 6 lignes de semaine + éléments d'habillage activables).
IsOpenBooleanMode champ uniquement. true tant que le calendrier en popup est ouvert.
Besoin de l'heure seule ? Deux sorties dédiées la donnent déjà formatée, dans tous les modes : SelectedStartTime (début) et SelectedEndTime (fin), au format hh:mm et sensibles à Use24h. En mode multiple, l'heure est globale (une seule pour tout le lot) et ces sorties sont le seul moyen de la lire, car SelectedDates ne contient que des dates. En simple et en plage, l'heure est aussi comprise dans SelectedDate / SelectedStartDate (début) et SelectedEndDate (fin), donc tu peux aussi l'extraire toi-même avec Text(cmpCalendar_1.SelectedDate, "hh:mm") ou Hour(...) / Minute(...). Pour composer de vraies dates-heures (date + heure combinées), quatre sorties numériques existent aussi : SelectedStartHour / SelectedStartMinute et SelectedEndHour / SelectedEndMinute. Use24h et MinuteStep ne changent que l'apparence du sélecteur, pas la valeur renvoyée.

Événements

Événements
ÉvénementParamètreDéclenché quand
OnChangeSelectedDateSe déclenche quand la sélection change.
OnNavigateSe déclenche quand le mois affiché change.
OnConfirmSe déclenche quand OK est pressé.
OnCancelSe déclenche quand Annuler est pressé.

Versions

Historique & changelog

Le composant suit le versionnage sémantique (MAJEUR.MINEUR.CORRECTIF). À chaque évolution, cette page et le numéro de version sont mis à jour pour que vous puissiez suivre. Notez la version que vous avez importée.

v1.0.0 17 juillet 2026 Version actuelle
  • AjoutPremière publication. Sélecteur de date complet : simple, plage ou multiple, avec désélection au re-clic.
  • AjoutRail des semaines (ISO 8601 ou US), pastilles d'événements (table Events) et dates spéciales pilotées par données (table Markers : surbrillances, échéances, jours bloqués).
  • AjoutEn-tête contextuel (pastilles semaine / trimestre / jour), double-mois, et sélection d'heure : un champ HH : MM qui ouvre une galerie heures/minutes en popup (12/24 h, début et fin).
  • AjoutMode champ (Settings.FieldMode) : le composant devient un champ compact qui ouvre le calendrier en popup, avec la sortie IsOpen pour piloter la hauteur côté écran.
  • Ajout20 langues intégrées (table Languages extensible), densité confort / compact, et thème clair / sombre entièrement personnalisable.
Compatibilité (SemVer). Un changement MAJEUR (ex. 2.0.0) peut casser une propriété existante ; MINEUR (ex. 1.1.0) ajoute des capacités rétro-compatibles ; CORRECTIF (ex. 1.0.1) corrige sans toucher aux propriétés existantes.