Oihana Next UI - 0.48.0

Application logo

Planning — Modèle & adaptateur

Le noyau sans interface : l'adaptateur schema.org qui lit les propriétés plutôt que les types, la récurrence déclarative, les colonnes de chevauchement et l'axe de temps. Les chiffres dont toutes les vues sont dessinées.

fromSchemaList — du JSON-LD en entrée, des fiches en sortie

Onze entrées volontairement pénibles : des instants et des dates nues, une durée sans date de fin, une séance annulée, un type maison qui porte byDay, une règle imbriquée dans eventSchedule, une série programmée sur aucun jour, une autre sur les jours fériés, et une référence de salle encodée à zéro. Rien dans les helpers ne connaît le nom d'un seul de ces types.

10/08/2026 → 16/08/2026
11 sources8 occurrences dans la fenêtre14 segments après découpe par jour
idtitredébutfinjournéesallestatutcouleur@type de la source
expo-photoExposition — Rivageslun. 10/08 00:00lun. 17/08 00:00jourAuditoriumscheduledaccentEvent
ws-initiation@2026-08-11Cycle d’initiationmar. 11/08 18:00mar. 11/08 20:00Salle BleuescheduledinfoWorkshopSeries
projectionProjection — court-métragemar. 11/08 20:00mar. 11/08 21:00aucunescheduled—Event
heure-du-conteHeure du contemer. 12/08 14:00mer. 12/08 14:45Salle BleuescheduledsecondaryEvent
atelier-numeriqueAtelier numériquejeu. 13/08 09:30jeu. 13/08 11:00Salle Bleuecancelled—Event
concert-rentreeConcert de rentréeven. 14/08 18:30ven. 14/08 20:00AuditoriumscheduledprimaryEvent
rencontre-auteurRencontre d’auteursam. 15/08 16:00sam. 15/08 17:00Auditoriumrescheduled—Event
fermetureFermeture annuelledim. 16/08 00:00lun. 17/08 00:00jouraucunescheduled—Event

Ce que les sources n'ont pas produit

Une source qui ne donne aucune occurrence n'est pas forcément une erreur — et c'est justement ce qu'il faut pouvoir vérifier.

  • 1Concert de rentréestartDate et endDate en instants, salle déjà résolue en objet Place.
  • 1Heure du conteAucune date de fin : la longueur vient d'une durée ISO 8601. La salle est une référence brute.
  • 1Exposition — RivagesDates nues, donc journée entière. Que le 16 soit couvert ou non, c'est allDayEndInclusive qui le décide.
  • 1Atelier numériqueAnnulée : le statut survit jusque dans la fiche, de quoi la barrer à l’affichage.
  • 1Rencontre d’auteurReplanifiée, et elle dit où elle était : de quoi dessiner le fantôme de l'ancien créneau.
  • 1Cycle d’initiationUn type maison dont les helpers ignorent tout. Il s'étend parce qu'il porte byDay — et exceptDate retire le jeudi.
  • 0Club de lectureLa règle est imbriquée sous eventSchedule, que schema.org autorise à se répéter d'où le tableau. Premier mercredi du mois.
  • 0Atelier d’écriturebyDay est un tableau vide : la série existe mais ne tourne aucun jour. Ce n'est pas la même chose que ne rien dire de ses jours.
  • 0Permanence jours fériésPublicHolidays est un membre légal de DayOfWeek et n'est pas un jour de la semaine. Écarté, avec un avertissement en développement.
  • 1Projection — court-métrageUne référence de salle à zéro, comme les back-offices encodent « aucune ». Elle ne doit pas devenir une ligne nommée 0.
  • 1Fermeture annuelleUne date nue et rien d’autre : journée entière, longue d’un jour.

layoutOverlaps — le partage de la largeur

Les positions sortent en fractions de la colonne, jamais en pixels : la vue les multiplie par la largeur dont elle dispose. Un événement seul en vol prend toute la place, deux qui se recouvrent se la partagent.

lun. 10/08—
mar. 11/08
Cycle d’initiationcol 1/1 · 100%Projection — court-métragecol 1/1 · 100%
mer. 12/08
Heure du contecol 1/1 · 100%
jeu. 13/08
Atelier numériquecol 1/1 · 100%
ven. 14/08
Concert de rentréecol 1/1 · 100%
sam. 15/08
Rencontre d’auteurcol 1/1 · 100%
dim. 16/08—

Le retour — toSchemaPatch

L'adaptateur va dans les deux sens ou il ne sert à rien. Voici le fragment que produirait un déplacement, prêt à être renvoyé à l'API — un patch, jamais un objet reconstruit. Sur une journée entière, la fin exclusive tenue en interne est ramenée au dernier jour couvert : lire puis réécrire ne doit rien changer.

occurrencestartDateendDate
Exposition — Rivages2026-08-102026-08-16
Cycle d’initiation2026-08-11T18:00:00.000Z2026-08-11T20:00:00.000Z
Projection — court-métrage2026-08-11T20:00:00.000Z2026-08-11T21:00:00.000Z
Heure du conte2026-08-12T14:00:00.000Z2026-08-12T14:45:00.000Z
Atelier numérique2026-08-13T09:30:00.000Z2026-08-13T11:00:00.000Z
Concert de rentrée2026-08-14T18:30:00.000Z2026-08-14T20:00:00.000Z

createTimeScale — l'axe

Une seule arithmétique pour la grille horaire et pour le timeline : ils ne diffèrent que par l'axe sur lequel elle est projetée. Ici, 08:00 → 22:00 à 48 pixels par heure.

hauteur 672px08:00 → 0px09:15 → 60px1 h 30 → 72pxaimant 09:22 → 09:15