Live UI catalogue

Prototype design system.

Foundations, components, and patterns now live in separate pages so demos stay readable and reusable.

Interface patterns

Reusable compositions with full-width previews.

Patterns need space to be evaluated properly. The demos below prioritize visual rendering first, then document variants, states, and instances below each preview.

Pattern

AppHeader

Sticky application bar with logo, primary navigation, and user menu.

components/patterns/AppHeader.vueDesign System/patterns/application-header.md

Editorial variants

Header composition

Show only the header decisions that change page behavior: navigation density, extra actions, and compact menu treatment.

C

Default navigation

Use for signed-in product pages with the main sections.

global shellactive itemuser menu
C

Custom actions

Add a small action only when it belongs to the global product chrome.

actions slotmd+
C

Compact menu

Collapse navigation into the menu control on narrow viewports.

mobileicon action

Variants

Default global menuImage logo or text markNavigation by props or slotCustom actions slotCustom user menu slotConfigurable content widthSticky or static for demos

States

Active itemHoverFocus visibleMenu mobileFallback without logoSticky at top

Known instances

layouts/app.vuepages/index.vuepages/catalogue.vuepages/ventes.vuepages/editeur.vuepages/design-system/patterns.vuelayouts/admin.vue

Usage rules

  • Use for every signed-in application page.
  • Do not recreate a local header inside a page.
  • Add final menus through navItems or the nav slot.
  • Disable sticky only in isolated pattern previews.
Pattern

AppUserMenu

User menu with trigger, profile card, Settings action, support links, and logout.

components/patterns/AppUserMenu.vueDesign System/patterns/user-menu.md

Editorial variants

Account menu states

Focus on trigger weight, open-panel behavior, and alignment rather than treating every item as a separate variant.

Closed trigger

Default resting state in the application header.

closedaccount

Demo User

demo@example.com

Open menu

Profile summary, settings action, support links, and logout.

popovershadow-tooltip

Demo User

demo@example.com

Start aligned

Use when the menu is anchored away from the right edge.

align=start

Variants

start/end alignmentOpen state controlled by v-modelto/href links or event-only buttonsConfigurable itemsConfigurable Settings action

States

ClosedOpenHover triggerHover itemFocus visibleEscape/outside click close

Known instances

components/patterns/AppHeader.vuepages/design-system/patterns.vue

Usage rules

  • Use in the header and any user-account context.
  • Wire actions through events, not directly inside the component.
  • Do not duplicate this popover in pages.
Pattern

AppSideNavigation

Left-side navigation for subsections, with active item and edge/floating behavior by breakpoint.

components/patterns/AppSideNavigation.vueDesign System/patterns/side-navigation.md

Editorial variants

Section navigation

Show the navigational states that affect scanning: active destination, disabled entry, and compact edge behavior.

Statistics
Platforms
Reports

Active item

Anchor the current subsection with the selected navigation token.

selectedItemIdroute active
Statistics
Platforms
Reports

Disabled item

Keep unavailable destinations visible but non-interactive.

disabledtext-dimmed
Statistics
Platforms
Reports

Compact edge

Use the edge alignment before the full floating 2xl layout.

edgeOnCompactsticky

Variants

Variable item countActive by selectedItemIdActive by routeto/href linksEvent-only buttonsConfigurable edgeOnCompactSmooth scroll to top on selectSticky or static for demos

States

Active itemHover itemFocus visibleDisabledCompact edge2xl floatingSticky below header

Known instances

components/pages/CatalogueHomePage.vuecomponents/pages/EditorHomePage.vuepages/index.vuepages/catalogue.vuepages/editeur.vuepages/design-system/patterns.vue

Usage rules

  • Use for secondary section navigation.
  • Place it in the first three columns of the 12-column grid at 2xl.
  • Change the active color through the token, not inside the component.
  • Keep item selection scrolling to the page top unless a page owns a custom scroll target.
  • Keep the sticky offset tokenized so it tracks the application header height.
Pattern

AppMainContentArea

Main content area that fills the remaining space to the right of the side navigation.

components/patterns/AppMainContentArea.vueDesign System/patterns/main-content-area.md

Editorial variants

Content frame

Keep the main area structurally consistent; only the temporary debug state should add visible styling.

Content slot

Default state lets real page content own the visible surface.

slot2xl:col-span-9

Main content area

Debug frame

Temporary layout inspection state while the page is being wired.

debugwarning tone

Variants

Invisible by defaultTemporary visible debug stateContent through slot

States

DefaultDebug visibleWith content

Known instances

components/pages/CatalogueHomePage.vuecomponents/pages/EditorHomePage.vuepages/index.vuepages/catalogue.vuepages/editeur.vuepages/design-system/patterns.vue

Usage rules

  • Use for the main content of application views with side navigation.
  • Do not recreate the content grid in every page.
  • Remove debug once real content is wired.
Pattern

AppCatalogueStatusWidget

Catalogue metadata status gauge with animated total and clickable status legend.

components/patterns/AppCatalogueStatusWidget.vueDesign System/patterns/catalogue-status-widget.md

Catalogue status

0

publications
au total

Variants

Summary-driven countsThree status bucketsClickable legendAnimated gaugeReduced-motion fallback

States

Loading summaryAnimated entranceLegend hoverFocus visibleZero-count segmentReduced motion

Known instances

components/pages/CatalogueHomePage.vuepages/index.vuepages/catalogue.vuepages/design-system/patterns.vue

Usage rules

  • Use for a compact overview of catalogue metadata quality.
  • Keep classification rules in the shared helper, not inside the pattern.
  • Use legend clicks only to announce filter intent until the catalogue filter UI exists.
  • Use semantic color tokens for every segment and legend item.
Pattern

AppRecentSalesWidget

Recent-sales dashboard summary with current metrics, previous-period comparison, and animated daily trend.

components/patterns/AppRecentSalesWidget.vueDesign System/patterns/recent-sales-widget.md

Recent sales

342 unités

PRÉC.336

5 000 $ CAD

PRÉC.4 911 $
Maximum value in this trend: 18.

Variants

Summary-driven metricsCurrent 30-day windowPrevious 30-day comparisonAnimated trend chartEmpty stateReduced-motion fallback

States

Current periodPrevious period upPrevious period downNo salesChart animationReduced motion

Known instances

components/pages/CatalogueHomePage.vuepages/index.vuepages/catalogue.vuepages/design-system/patterns.vue

Usage rules

  • Use for compact sales performance on dashboard cards.
  • Keep sales aggregation in the shared helper, not inside the pattern.
  • Use UiTrendAreaChart for the chart so the animation and accessibility stay centralized.
  • Use text metrics and comparison badges so the chart is not the only source of information.
Pattern

AppDistributionChannelsWidget

Distribution-channel dashboard summary with clickable legend rows and an animated donut chart.

components/patterns/AppDistributionChannelsWidget.vueDesign System/patterns/distribution-channels-widget.md

Distribution channels

Variants

Summary-driven channelsCurrent 30-day windowTop channels plus otherClickable legendAnimated donut chartEmpty state

States

Channel distributionLegend hoverFocus visibleNo salesChart animationReduced motion

Known instances

components/pages/CatalogueHomePage.vuepages/index.vuepages/catalogue.vuepages/design-system/patterns.vue

Usage rules

  • Use for compact channel mix summaries on dashboard cards.
  • Keep sales aggregation in the shared helper, not inside the pattern.
  • Use UiDonutChart for the chart so rendering and accessibility stay centralized.
  • Use legend clicks only to announce filter intent until catalogue filtering exists.
Pattern

AppPublicationListSection

Catalogue publication-list shell with normalized data, search, action bar, pagination, empty state, and switchable complete-card, compact-card, or table views.

components/patterns/AppPublicationListSection.vueDesign System/patterns/publication-list-section.md

Toutes les publications

Affichage
Tri
Métadonnées
Format
Vente
3 publications au total
Couverture de Atlas des lumières tardives

Atlas des lumières tardives

Mila Durocher

Livre numérique
En ventecatalogue actif Modifié le 5 mai 2026

EPUB9781772200001

Fichier valide Filigrane

PDF9781772200001

Fichier valide Filigrane

3 erreurs : Fichier absent, Métadonnées incomplètes, métadonnées recommandées à compléter.

Couverture de Le cercle des cartographes à l'encre

Le cercle des cartographes à l'encre

Adrien Valle

Livre numérique
Hors ventemétadonnées à compléter Modifié le 27 mars 2026

EPUB9781772200003

Fichier absent Filigrane

PDF9781772200003

Fichier valide Filigrane
Couverture de Le verger aux signaux

Le verger aux signaux

Léonie Mercier

Livre numérique
En ventecatalogue actif Modifié le 18 avril 2026

EPUB9781772200002

Fichier valide Filigrane

PDF9781772200002

Fichier valide Filigrane

Variants

Detailed cards viewCompact cards viewTable viewBulk action barLocal searchDisplay switchView-sized paginationResponsive card gridEmpty stateLive result count

States

Full catalogueFiltered resultsPaginated resultsNo matching resultsFocus visible searchLoading books from parent

Known instances

components/pages/CatalogueHomePage.vuepages/index.vuepages/catalogue.vuepages/design-system/patterns.vue

Usage rules

  • Use below catalogue summary cards when the page needs to list real publications.
  • Pass raw CatalogBook records and keep normalization in utils/publicationListItems.ts.
  • Do not duplicate publication card or table markup inside pages.
  • Keep filtering, sorting, and pagination route-backed so the list survives reloads.
Pattern

AppPublicationCard

Detailed horizontal publication card showing cover, title, author, file status, sales state, metadata status, and row actions.

components/patterns/AppPublicationCard.vueDesign System/patterns/publication-card.md
Couverture de Atlas des lumières tardives

Atlas des lumières tardives

Mila Durocher

Livre numérique
En ventecatalogue actif Modifié le 5 mai 2026

EPUB9781772200001

Fichier valide Filigrane

PDF9781772200001

Fichier valide Filigrane

Variants

Optimal metadataComplete metadataIncomplete metadataValid filesMissing file warning

States

Default rowSelected checkboxLong title clampLong metadata clampFocus visible actions

Known instances

components/patterns/AppPublicationListSection.vuepages/design-system/patterns.vue

Usage rules

  • Use only with a normalized PublicationListItem.
  • Keep row width controlled by the parent list.
  • Do not add local status colors; use UiBadge variants.
  • Add actions only after publication destinations and behaviours are defined.
Pattern

AppPublicationCompactCard

Compact publication card for dense catalogue scanning with cover, title, author, metadata status, key metadata, selection, and prepared row action.

components/patterns/AppPublicationCompactCard.vueDesign System/patterns/publication-compact-card.md
Couverture de Atlas des lumières tardives

Atlas des lumières tardives

Mila Durocher

Métadonnées optimales En vente
EPUBÉditions Brume
3 catégories · 5 mots-clés

Variants

Optimal metadataComplete metadataIncomplete metadataFor saleNot for sale

States

Default cardSelected checkboxLong title truncateLong metadata truncateFocus visible action

Known instances

components/patterns/AppPublicationListSection.vuepages/design-system/patterns.vue

Usage rules

  • Use only with a normalized PublicationListItem.
  • Use inside AppPublicationListSection compact mode, not directly in pages.
  • Keep actions as UiButton instances until real publication destinations are defined.
  • Keep long labels truncated so compact grids never create horizontal overflow.
Pattern

AppPublicationsTable

Accessible catalogue table for dense publication scanning with title, author, type, ISBN, status icons, errors, and prepared row actions.

components/patterns/AppPublicationsTable.vueDesign System/patterns/publications-table.md

Publications en tableau

SélectionActions

Atlas des lumières tardives

Mila Durocher

EPUB

9781772200001

Aucune erreur

Le cercle des cartographes à l'encre

Adrien Valle

EPUB

9781772200003

Le verger aux signaux

Léonie Mercier

EPUB

9781772200002

Aucune erreur

Variants

Title sortAuthor sortFormat sortISBN sortStatus sortError count sortSticky action cell

States

Default publication orderAscending sortDescending sortRow hoverFocus visible actionsConstrained width with internal table scroll

Known instances

components/patterns/AppPublicationListSection.vuepages/design-system/patterns.vue

Usage rules

  • Use only with normalized PublicationListItem records.
  • Keep sorting in utils/publicationListItems.ts instead of duplicating comparators in views.
  • Use UiTableActionCell for prepared actions so constrained widths keep actions reachable.
  • Do not add real publication actions until the publication routes and behaviours are defined.
Pattern

AppSalesLeaderboard

Editorial sales ranking module with top-three emphasis, metric toggle, and accessible table semantics.

components/patterns/AppSalesLeaderboard.vueDesign System/patterns/sales-leaderboard.md

Palmarès des ventes

30j

Palmarès Tendances Ventes
04

Des lunes de papier pour les vivants

Claire Faucher

6 %

17 unités

187 $

Variants

Units metricRevenue metricTop-three featured rowsCompact rows 4-10Empty state

States

Unit sortRevenue sortTrend upTrend downTrend flatNo sales

Known instances

components/pages/SalesHomePage.vuepages/ventes.vuepages/design-system/patterns.vue

Usage rules

  • Use for ranked sales modules where the ranking metric can change locally.
  • Keep aggregation and trend logic in the shared helper, not inside the pattern.
  • Enrich sales rows with catalogue cover and author data before passing them to the pattern.
  • Use the segmented metric switch only for this module; do not couple it to the main chart controls.
Pattern

AppSalesRecommendations

Action-oriented sales signal module for drops, growth, launches, channel growth, and concentration risk.

components/patterns/AppSalesRecommendations.vueDesign System/patterns/sales-recommendations.md

Actions recommandées

30j

Priorité élevée

Surveiller la baisse de Le dernier jardin sous la mer

Le titre recule par rapport à la période précédente. Vérifier si la baisse vient d’un canal précis ou d’une perte de visibilité.

Signal
-33 %
Cible
Le dernier jardin sous la mer
Priorité moyenne

Le cercle des cartographes à l’encre arrive dans le palmarès

Ce titre n’avait aucune vente dans la période précédente. Suivre son lancement pour confirmer la tendance.

Signal
10 unités
Cible
Le cercle des cartographes à l’encre
Priorité moyenne

Dépendance forte à Amazon Kindle Store

Une grande part des ventes vient d’un seul canal. Surveiller cette concentration pour réduire le risque commercial.

Signal
48 % des unités
Cible
Amazon Kindle Store

Variants

Recommendation listEmpty statePriority badgeTone-specific signal cards

States

Title dropTitle growthNew titleChannel growthChannel concentrationNo recommendations

Known instances

components/pages/SalesHomePage.vuepages/ventes.vuepages/design-system/patterns.vue

Usage rules

  • Use after the Perspectives module when the page needs actionable sales signals.
  • Keep recommendation logic in the shared helper, not inside the pattern.
  • Pass precomputed recommendations and the active period label from the page container.
  • Use action events to wire future workflows; do not hardcode navigation inside the pattern.
Pattern

AppInteractiveCard

Editable card pattern with read-only and edit modes, canonical actions, and smooth content transition.

components/patterns/AppInteractiveCard.vueDesign System/patterns/interactive-card.md

Contact details

Editorial variants

Editable content

Compare the read-only surface with the editing surface and the disabled-save decision.

Contact details

View mode

Quiet read-only presentation with one clear edit affordance.

view slotedit action

Contact details

Edit mode

Outlined editing state with the form and canonical actions.

v-model:editingoutline

Contact details

Save disabled

Use when parent validation cannot persist the form yet.

disableSave

Variants

Read-only view slotEdit form slotControlled by v-model:editingCustom action labelsCustom edit iconDisabled save action

States

View modeEdit modeTransitioningSave disabledHover actionFocus visible

Known instances

components/pages/EditorHomePage.vuepages/editeur.vuepages/design-system/patterns.vue

Usage rules

  • Use for in-place editing of a cohesive section of content.
  • Keep field components in the edit slot; do not use native form controls directly.
  • Keep persistence and validation in the parent page or feature composable.
Pattern

AppDataTableCard

Application data-table container that matches the normal interactive-card surface.

components/patterns/AppDataTableCard.vueDesign System/patterns/data-table-card.md

Users

Last name Username Status
FlorianMartinflorian.martinVerified
GenevieveVaillancourtgenevieve.vaillancourtVerified
CarolineBoyercaroline.boyer+test@example.comNot verified

Editorial variants

Table container

Show the pattern decisions around title presence, action placement, and scrollable table composition.

Users

Florian Verified
CarolinePending

Titled table

Use when a table owns a named content section.

title proppanel

Users

Florian Verified
CarolinePending

Action slot

Place creation or export actions in the header slot.

actions slot

Users

Florian Verified
CarolinePending

Scrollable table

Keep wide columns inside the table shell, not the page.

UiTableShelloverflow-x

Variants

Title propActions slotDefault table slot

States

Normal modeLight/dark themeScrollable table content

Known instances

components/pages/EditorHomePage.vuepages/design-system/patterns.vue

Usage rules

  • Use for data-table sections inside application main content.
  • Compose the table from existing table UI components.
  • Do not create table card wrappers locally in pages.