Skip to content
Plume Visuals
← Back
Core range

Streamgraph for Power BI Stream Plume

How the make-up of a total changes over time: flowing streams, named where they are thickest.

Tutorials ↓

Interactive demo

The real Power BI visual, running in your browser with the sample report's fictitious data. Switch scenario, style or year: the visual updates as it does in Power BI. Premium ★ features are shown here without the watermark; in Power BI, without a license, they show “Plume Visuals · Premium preview”.

Stream Plume draws a streamgraph: each category (channel, product, energy source) is a stream whose thickness follows its value, and the streams flow around a central axis with no straight edge, to show trends better. The largest sit in the middle, smooth edges never cross, and each stream's name is written inside it, where it is thickest, without overlap. Hover a stream to bring it forward, click to filter the page. Centered, 100% and stacked areas in one setting; small multiples with a shared scale; a size scale instead of an axis with no zero. With premium: automatic highlight of the biggest risers or fallers, Top N and Others, start and end values, reference period and change, events from a list or a measure, navigator and animated playback with a live ranking.

Use cases

  • Revenue by channel or product line, month by month
  • Energy mix, market shares, budget split over several years
  • Support tickets by category, visits by traffic source
  • Before / after: change of each stream versus a reference period

FreeIncluded for free

  • Flowing streams (streamgraph), centered, 100% or stacked areas; largest in the middle, by total, by name or custom order
  • Smooth edges that never cross, or straight edges; hatching for print
  • Each stream's name written inside it, sized by thickness, without overlap; value or total as an option
  • Hover brings a stream forward, detailed tooltip (share, rank, change), cross-filtering, highlighting
  • Date, year or category axis; size scale; Y axis for stacked areas and 100%
  • Small multiples with a shared scale; left-to-right reveal on loading; 30,000 rows and more
  • Reference lines (Analytics pane), gridlines, time axis drill-down
  • Dynamic formats: fx button on colors and texts, any option driven by DAX

PremiumPremium features

  • Highlight: biggest risers or fallers, largest or named streams; style gradient
  • Top N and Others, start and end values with the change, gradient toward the present
  • Reference period: change of each stream in the tooltip and the labels
  • Annotations as in Line Plume: list or DAX measure, anchored on a stream, shaded periods, moved with the mouse
  • Animated playback (▶ cursor) with a ranking at each date; navigator (mini chart and window)
  • Order by peak date, step edges, "name and share of the total" labels
  • Catalog-wide styles (Neon, Newspaper, Nordic…), palettes, theme JSON

Usable without a key to try them, with a watermark.

Tutorials

Start with Getting started, then pick from the how-to guides. The Fields and settings page describes every option of the Format pane.

  1. Getting startedBeginner6 min readA streamgraph in Power BI: watch the make-up changeGetting started with Stream Plume: prepare a monthly table by channel, insert the visual, read the streams, change the layout and filter the page with one click.
  2. How-to guidesIntermediate5 min readStream Plume: 10 how-to recipes to read a compositionStep by step: 100% shares, total of each stream, fixed order, small multiples, biggest risers, Top N, reference period, events, navigator, playback.
  3. Fields and settingsIntermediate21 min readStream Plume: every field and setting explainedEvery field well and every setting of the Format and Analytics panes of Stream Plume: what it does, its possible values and its default value.
  4. BasicsGetting started with Plume visualsInstallation, license, styles and the settings shared by every visual.

Fields to drop into the visual

FieldContent
Time axisDate, year or ordered category (not the automatic hierarchy)Required
Streams (legend)One stream per value: channel, product, sourceOptional
ValuesOne measure with the legend, or several measures (one per stream)Required
Small multiplesOne panel per value (region, country)Optional
Annotations (text)Text measure: an annotation wherever it is not emptyOptionalPremium
TooltipsExtra measuresOptional
Dynamic formatMeasures renamed card.setting (e.g. title.text): the Format pane driven by DAXOptional

Missing a feature? We adapt our visuals or build custom ones. Request a custom visual

Found a bug in Stream Plume, or have an idea to improve it? Report a bug · Suggest an idea

Technical reference for AI assistants

This section is meant for AI assistants (ChatGPT, Claude, Copilot…): every field, every Format pane option with its internal name, the expected data shape and DAX examples. Generated from the visual's code, version 1.1.0.0. Paste it into your assistant so it can guide you.

Raw Markdown version (/ai/visuals/stream-graph.md)
# Stream Plume: technical reference for AI assistants

> Power BI custom visual by Plume Studio (Plume Visuals). Visual version **1.1.0.0**. This page is generated from the visual's source code at each site build: field names, option names and defaults are exact for this version.

Use it to help someone build a report with Stream Plume: which fields to drag, how to shape the data, which Format pane option to change, or how to write the visual's settings in a PBIP `visual.json` file.

- Product page: https://plumevisuals.com/en/visuals/stream-graph (French: https://plumevisuals.com/fr/visuels/stream-graph)
- Summary: How the make-up of a total changes over time: flowing streams, named where they are thickest.
- Power BI visual GUID (`visualType`): `plumeStreamGraphBD58E5BDB1F84D8B9E68756C1DFFB2D4`
- Power BI visuals API: 5.11.1
- Support: https://plumevisuals.com/support · contact@plumevisuals.com
- Index of everything on the site for AI assistants: https://plumevisuals.com/llms.txt

## What the visual does

Stream Plume (identifier `stream-graph`) is a Power BI custom visual (version 1.1.0.0, installed from its `.pbiviz` file; not yet on AppSource) that draws **streamgraphs**: stacked areas flowing around a central axis, to show how the make-up of a total changes over time. Power BI Desktop has no native streamgraph (only stacked areas on zero); Microsoft's free Stream Graph visual has per-point labels and fixed tooltips.

**New in version 1.1.0.0 (30/10/2026):** Format pane reorganized (new **Gridlines** card, `events` → `annotations`, `reference` → `refPeriod`); free reference lines (Analytics pane), annotations like Line Plume (anchored on a stream), playback on the shared player (`play.speed` per frame, autoplay); `play.duration` is no longer read.

- **Four layouts** (`streams.offset`): `wiggle` (flowing streams, Byron and Wattenberg's weighted-wiggle baseline, then straightened so the chart does not drift), `silhouette` (symmetric around a straight line), `expand` (each date = 100%), `zero` (classic stacked areas with a Y axis).
- **Stream order** (`streams.order`, bottom to top): `insideOut` (largest in the middle, default), `total`, `peak` ★ (by peak date), `name`, `data`, `custom` (`streams.customOrder` = names separated by `;`; others follow); `streams.reverse`.
- **Smooth edges that never cross** (`streams.curve` = `smooth`, a clamped B-spline like d3.curveBasis), `linear` or `step` ★.
- **Stream names written inside the streams**, where they are thickest, sized by thickness (`streamLabels.autoSize`, `fontSize` min 10, `maxSize` 15), never overlapping; a stream too thin keeps no label. Content: name, name and value, name and total, name and share, name and change vs. the reference period ★.
- **Size scale**: flowing and centered streams have no zero, so a vertical "↕ 200 k€" marker replaces the Y axis (`yAxis.scaleBar`); `zero` and `expand` show a real Y axis.
- Hover a stream: the others fade; tooltip with value, share, rank, change vs. previous point, total at the date, Tooltips measures (or every stream at the date with `tooltip.tipAll`). Click = select the stream (Ctrl for several), legend click too, cross-highlighting drawn as the highlighted part of each stream.
- **Small multiples** (`multiples` role): one panel per value, shared scale (same thickness for the same value) free, independent scale ★.
- **Time**: a left-to-right reveal when shown and when the data changes (`streams.reveal`), edges glide when only values change; "Reduce motion" respected. ★ playback cursor (`play.controls`, premium since the 22/10/2026 rebalancing; the reveal on loading stays free), with a ★ live ranking; ★ navigator.

## Free vs premium (★)

- Every feature works without a key and nothing is ever blocked. Free features never show a watermark.
- Shared Style card (the same in every Plume visual): the styles `none`, `minimal` and `blackWhite`, the two Plume gradient palettes (`crest`, `crestDiverging`), "Follow report theme" and all custom colors are **free**; every other `style.preset`, the other gradient palettes and `style.themeJson` ("Theme JSON ★") are **premium**.
- Free in Stream Plume: the four layouts, the orders `insideOut`, `total`, `name`, `data`, `custom`, smooth and straight edges, solid and **hatch** fills, opacity and separator, labels (name, value, total), size scale, Y axis, legend, small multiples with a shared scale, reveal animation, tooltips, selection, highlighting, keyboard.
- Premium features of Stream Plume:
  - `dataColors.mode` = `gradient` (style gradient by size) or `highlight` (`highlightWhat` = `risers` | `fallers` | `top` | `names`, `highlightN`, `highlightNames`, `highlightColor`, `othersColor`);
  - `streams.fill` = `gradient` (gradient toward the present); `streams.topN` (Top N + "Others": `n`, `othersLabel`, `othersColor`);
  - `edgeValues.show` (start and end values, `side`, `content` = `value` | `share` | `valueChange` | `nameValue`);
  - `streamLabels.content` = `nameChange`;
  - `refPeriod.show` (Analytics pane: `from`, `to`, `label`, `shade`, `color`, `opacity`, `tooltip`);
  - `events` (Analytics pane: `list`) and the `events` role (text measure);
  - `navigator.show` (`height`, `from`, `to`); `play.ranking` (ranking at the cursor date, `rankCount`; counts only when `play.controls` is on);
  - `smallMultiples.scale` = `independent`;
  - since the 22/10/2026 rebalancing: `play.controls` (playback cursor, card « Lecture ★ » / « Playback ★ », at least two axis positions); `streams.order` = `peak` (at least two streams); `streams.curve` = `step` (at least two positions); `streamLabels.content` = `nameShare` (labels shown).
- The watermark is decided on ★ features **really applied**: a highlight that finds no stream, a Top N that groups nothing, a reference period outside the axis or an empty event list show no watermark.
- Without a valid key, a premium feature in use shows, in edit mode, a "Premium preview" note in the footer; in reading view, **"Plume Visuals · Premium preview"** (French « Plume Visuals · Aperçu premium ») is repeated lightly across the whole visual, without catching the mouse. It disappears once a key is pasted in **Format › Plume Studio License › License key** (`license.key`), the **first card** of the Format pane.
- Accepted keys: only keys starting with `PLUM1.` shown in the buyer's account on plumevisuals.com, checked offline (Ed25519 signature), covering `stream-graph` or the whole catalog. Licenses last one year (one-time payment). Prices: 39 € personal, 99 € SME, 299 € enterprise per year, or the catalog pack.

## Expected data shape

One row per date and per category, with a measure for the amount.

| Time axis (`axis`) | Streams (`series`) | Values (`values`) |
|---|---|---|
| 2025-01-01 | Web | 61,000 |
| 2025-01-01 | Stores | 42,000 |
| 2025-02-01 | Web | 66,000 |

- **Time axis** (`axis`, « Axe de temps », one column, required): a date **column** (not the automatic date hierarchy) gives a continuous time axis; an integer column between 1000 and 3000 is read as years; text gives a category axis in data order (`xAxis.type` = `categorical` forces it).
- **Streams (legend)** (`series`, « Flux (légende) », one column): one stream per value, with exactly one measure in Values. Without it, each measure in Values is a stream.
- **Values** (`values`, « Valeurs »): the thickness. Negative values count as zero (warning in edit mode); missing values count as zero.
- **Small multiples** (`multiples`), **Events (text) ★** (`events`, text measure: a marker wherever it is not empty), **Tooltips** (`tooltips`), **Dynamic format** (`format`).
- Data view: categorical mapping with Small multiples, Time axis and Streams as **categories** (one row per point), so the 30,000-row window applies to every point; more rows are fetched with `fetchMoreData` up to 100,000. Beyond one point per 1.5 pixels, neighboring dates are averaged into groups (tooltip "start – end"). 100,004 rows render in under 4 s.

## DAX recipes

```dax
Revenue = SUM ( Sales[Amount] )
// Events (text) ★: a marker on September 2023
Event = IF ( MAX ( Sales[Month] ) = DATE ( 2023, 9, 1 ), "Marketplaces launch" )
// Dynamic format, renamed title.text: a title computed on the whole selection
Sales title = "Revenue by channel: " & FORMAT ( CALCULATE ( [Revenue], ALLSELECTED () ), "$#,0" )
```

## List syntax

- `streams.customOrder`: `Stores; Web` (bottom to top, case and accents ignored).
- `dataColors.highlightNames`: `Web; Export`.
- `annotations.list` ★: one line per event, `x | text | #RRGGBB` (color optional), `x1..x2 | text` for a shaded period; x = date (`2020-03-17`, `2020-03`, `2020`, `17/03/2020`), number or category as displayed; `#` or `//` lines are comments.
- `refPeriod.from` / `refPeriod.to`, `navigator.from` / `navigator.to`: same formats; an empty `refPeriod.to` = the same period (`2019` = the 12 months of 2019).

## Interactions with the report

- Click a stream: cross-filter on that stream value (identity of the Streams value alone); Ctrl for several; click "Others" = all grouped streams; click an empty area clears. Legend click selects, legend hover brings the stream forward.
- Context menu everywhere (on a stream: the point = small multiple + date + stream; elsewhere: the visual).
- Keyboard: Tab to the chart, ← → dates, ↑ ↓ streams, Enter selects, Esc clears (and stops playback). ARIA labels and screen reader announcements in French and English.
- Navigator ★: drag the window or its handles, wheel zoom on the chart, double-click to reset; the window is per session (not saved). Playback ★: ▶ / Pause button at the top right, Esc stops; steps instead of a smooth glide when motion is reduced.
- The visual never calls `persistProperties`.

## Format pane: option IDs

- Card order: `license`, `style`, `dataColors`, `streams`, `streamLabels`, `edgeValues`, `xAxis`, `yAxis`, `legend`, `smallMultiples`, `navigator`, `play`, `interaction`, then `title`, `source`, `container`, `texts`; Analytics pane: `reference`, `annotations`. Format pane in version 1.1.0.0 (30/10/2026), top to bottom: `license`, `style`, `dataColors`, `streams`, `streamLabels`, `edgeValues`, `xAxis`, `yAxis`, `gridlines`, `legend`, `annotations`, `navigator`, `smallMultiples`, `play`, `interaction`, `tooltip`, `title`, `source`, `container`, `texts`; Analytics pane: `refPeriod`, `reference`. Settings moved or renamed in this version keep working in older reports (the old names are still read).
- `streams`: `offset` (`wiggle` | `silhouette` | `expand` | `zero`), `order` (`insideOut` | `total` | `peak` ★ | `name` | `data` | `custom`), `customOrder`, `reverse`, `curve` (`smooth` | `linear` | `step` ★), `fill` (`solid` | `gradient` ★ | `hatch`), `opacity` (10–100, 92), `outline`, `outlineWidth` (0.8), `reveal`, `topN` ★, `n` (8), `othersLabel`, `othersColor`.
- `streamLabels`: `show`, `content` (`name` | `nameValue` | `nameTotal` | `nameShare` ★ | `nameChange` ★), `placement` (`thickest` | `end` | `start`), `autoSize`, `fontSize` (10), `maxSize` (15), `color`, `bold`, `halo`, `hideLegend`, `units`, `decimals`, `prefix`, `suffix`.
- `edgeValues` ★: `show`, `side` (`both` | `end` | `start`), `content`, `fontSize` (9), `colorBy` (`series` | `text`), `units`, `decimals`, `prefix`, `suffix`.
- `xAxis`: `show`, `fontSize`, `color`, `labelMode`, `maxSize`, `line`, `type` (`auto` | `continuous` | `categorical`), `dateFormat`, `showTitle`, `titleText`, `gridlines.vShow` (on), `gridlines.vStyle`.
- `yAxis`: `show`, `scaleBar`, `position`, `fontSize`, `color`, `units`, `decimals`, `prefix`, `suffix`, `line`, `min`, `max`, `ticks`, `showTitle`, `titleText`, `gridlines.hShow`, `gridlines.hStyle`, `gridlines.hColor`, `gridlines.zeroLine`.
- `smallMultiples`: `columns` (0 = auto), `gap` (14), `scale` (`shared` | `independent` ★), `border`, `titleShow`, `titleSize`, `titleColor`, `titleTotal`.
- `navigator` ★: `show`, `height` (38), `from`, `to`. `play` (shared player): `controls` ★, `speed` (duration of one frame in ms; replaces the former `duration` of a whole run, which is no longer read), `loop`, `autoPlay`, `start`, `ranking` ★ (off), `rankCount` (5).
- `interaction`: `hover`, `dim` (25), `crosshair`, `tooltip.tipAll`. `reference` ★ and `events` ★: see above.

## Editing a PBIP report (visual.json)

`visualType` is the visual GUID, `queryState` keys are the data role names, `objects` keys are the option IDs.

```json
{
  "visualType": "plumeStreamGraphBD58E5BDB1F84D8B9E68756C1DFFB2D4",
  "query": {
    "queryState": {
      "axis":   { "projections": [ { "field": { "Column":  { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Month" } }, "queryRef": "Sales.Month", "nativeQueryRef": "Month" } ] },
      "series": { "projections": [ { "field": { "Column":  { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Channel" } }, "queryRef": "Sales.Channel", "nativeQueryRef": "Channel" } ] },
      "values": { "projections": [ { "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Revenue" } }, "queryRef": "Sales.Revenue", "nativeQueryRef": "Revenue" } ] }
    }
  },
  "objects": {
    "streams":      [ { "properties": { "offset": { "expr": { "Literal": { "Value": "'silhouette'" } } } } } ],
    "streamLabels": [ { "properties": { "content": { "expr": { "Literal": { "Value": "'nameTotal'" } } }, "hideLegend": { "expr": { "Literal": { "Value": "true" } } } } } ]
  }
}
```

## Styles and theme JSON

- `style.preset` takes one of the 20 style IDs shared by every Plume visual. `minimal` hides the vertical grid and the legend (names stay in the streams); `blackWhite` uses hatching; a style with `fill` = `hatch` or `outlined` changes the fill when it was left at its default.
- `style.themeJson` (Theme JSON ★): see https://plumevisuals.com/ai/tutorials/en/themes-json.md.

## Common pitfalls

- One wide stream, or one stream per year: the date hierarchy is used instead of the date column.
- No Y axis: expected for `wiggle` and `silhouette` (no zero); read the size scale or use `zero` / `expand`.
- A stream has no label: it is too thin everywhere; lower `streamLabels.fontSize`.
- "Negative values counted as zero": a stream cannot be negative; use Waterfall Plume or Bar Plume for changes.
- Watermark visible: a ★ feature really applied (see above), a ★ style or a theme JSON, without a valid key.
- The visual makes no network request: data and license key stay in the report.

## Features that do NOT exist (do not suggest them)

Negative streams or diverging streams, a saved navigator window or playback position, streams scrolled vertically in small multiples, image textures, exporting the chart as an image, a separate Play axis field (the time axis itself is played: `play.controls`), speed buttons on a play bar.

## Data fields (wells)

Internal name = data role name (PBIP `queryState` key). Labels as shown in Power BI (English / French). ★ = premium.

| Internal name | Label (EN) | Label (FR) | Kind | Max fields | Description |
|---|---|---|---|---|---|
| `axis` | Time axis | Axe de temps | column | 4 | Date, year, number or ordered category (months, quarters…) along which the streams flow. |
| `series` | Streams (legend) | Flux (légende) | column | 1 | One stream per value of this field. Without it, each measure in Values is a stream. |
| `values` | Values | Valeurs | measure | several |  |
| `multiples` | Small multiples | Petits multiples | column | 1 |  |
| `events` | Annotations (text) ★ | Annotations (texte) ★ | measure | 1 | Optional text measure: a vertical marker with its text wherever it is not empty. |
| `tooltips` | Tooltips | Infobulles | measure | several |  |
| `format` | Dynamic format | Format dynamique | measure | several | Measures named card.setting (e.g. title.fontSize): drive any Format option with DAX |

Data view: categorical, categories = `multiples` + `axis` + `series` (one row per combination), 30,000 rows per data window (more fetched automatically); measures = `values`, `events`, `tooltips`, `format`.
Capabilities: supportsHighlight, supportsKeyboardFocus, supportsMultiVisualSelection, supportsLandingPage, supportsEmptyDataView.
Network access: none (no privileges requested, no external request).

## Format pane options (249)

Columns: option ID (`object.property`), labels EN / FR as shown in Power BI, control type, PBIP literal type, default value, allowed values, notes.

### Plume Studio License / Licence Plume Studio (`license`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `license.buy` | Get a license | Obtenir une licence | info | text | `plumevisuals.com` |  |  |
| `license.key` | License key | Clé de licence | text | text | (empty) |  | Paste the key received after purchase on plumevisuals.com (starts with PLUM1.). Checked offline. |
| `license.showOwner` | Show license holder (edit mode) | Afficher le titulaire (mode édition) | toggle | bool | `true` | true / false |  |

### Style (`style`, Format pane)

**Style**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.preset` | Style | Style | dropdown | enumeration | `none` | `none` None; `minimal` Minimal; `blackWhite` Black & White; `press` Newspaper ★; `vintage` Vintage (antique plate) ★; `earth` Earth ★; `nordic` Nordic ★; `executive` Executive ★; `accessible` Accessible (high legibility) ★; `pastel` Pastel ★; `bauhaus` Bauhaus (pop) ★; `climate` Climate ★; `blueprint` Blueprint ★; `unknownPleasures` Unknown Pleasures ★; `dark` Graphite (dark) ★; `neon` Neon ★; `terminal` Terminal (Matrix) ★; `infographic` Infographic ★; `cockpit` Cockpit (HUD) ★; `hologram` Hologram ★ | Complete look shared by all Plume visuals: colors, three palettes, fonts, frame, table header, marks and effects. Customize colors below. |
| `style.themeJson` | Theme JSON ★ | Thème JSON ★ | textarea | text | (empty) |  | Paste a JSON theme: see the 'JSON themes' tutorial on plumevisuals.com |
| `style.followTheme` | Follow report theme | Suivre le thème du rapport | toggle | bool | `false` | true / false | Text, background, accent and data colors come from the Power BI report theme. |
| `style.reverse` | Reverse gradients | Inverser les dégradés | toggle | bool | `false` | true / false |  |

**Custom colors / Couleurs personnalisées**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.customColors` | Customize colors | Personnaliser les couleurs | toggle | bool | `false` | true / false | Start from the style and pick your own colors. A color left empty keeps the style's color. |
| `style.colorBackground` | Background | Fond | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorText` | Text | Texte | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorMuted` | Secondary text | Texte secondaire | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorGrid` | Lines and grid | Traits et grille | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorAccent` | Accent | Accent | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorPositive` | Favorable | Favorable | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.colorNegative` | Unfavorable | Défavorable | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series1` | Series 1 | Série 1 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series2` | Series 2 | Série 2 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series3` | Series 3 | Série 3 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series4` | Series 4 | Série 4 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series5` | Series 5 | Série 5 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series6` | Series 6 | Série 6 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series7` | Series 7 | Série 7 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.series8` | Series 8 | Série 8 | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.palette` | Gradient palette | Palette du dégradé | dropdown | enumeration | `auto` | `auto` Style or theme palette; `crest` Plume (sequential); `crestDiverging` Plume (diverging); `viridis` Viridis ★; `magma` Magma ★; `inferno` Inferno ★; `cividis` Cividis (colorblind-safe) ★; `warmingStripes` Warming stripes ★; `rdYlBu` Red–Yellow–Blue ★; `brBG` Brown–Teal (drought) ★; `spectral` Spectral ★; `blues` Blues ★; `reds` Reds ★; `grays` Grays ★; `press` Press (ink and paper) ★; `nordic` Nordic ★; `earth` Earth (ochre to umber) ★; `pastel` Pastel ★; `okabeIto` Okabe-Ito (colorblind-safe) ★ | Visible when `style.customColors` = `true`. Gradient from the catalog (Viridis, Magma…). The start, middle and end colors below replace it. |
| `style.scaleLow` | Gradient: start | Dégradé : début | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.scaleMid` | Gradient: middle (diverging) | Dégradé : milieu (écarts) | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |
| `style.scaleHigh` | Gradient: end | Dégradé : fin | color | fill | (empty) | hex color | Visible when `style.customColors` = `true` |

**Text / Texte**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.fontFamily` | Font | Police | font | formatting | `Segoe UI, wf_segoe-ui_normal, helvetica, arial, sans-serif` |  | Used by every text of the visual (title, axes, labels, cells). |

**Animations**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `style.animate` | Animations | Animations | toggle | bool | `true` | true / false | Smooth transitions when data changes. Automatically disabled when the system asks to reduce motion. |

### Data colors / Couleurs des données (`dataColors`, Format pane)

Per-item card: Power BI shows it once per series, category, column or KPI (an "Apply settings to" list where relevant). In PBIP `visual.json`, each entry of `objects.dataColors` carries a `selector` (`metadata` = the field's queryRef, or `data` for a category value); an entry without a selector applies to all items.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `dataColors.mode` | Coloring | Coloration | dropdown | enumeration | `auto` | `auto` Palette (one color per stream); `gradient` Style gradient (largest to smallest) ★; `highlight` Highlight streams ★ |  |
| `dataColors.single` | Color | Couleur | color | fill | (empty) | hex color |  |
| `dataColors.fill` | Color | Couleur | color | fill | (empty) | hex color |  |
| `dataColors.highlightWhat` | Highlighted streams | Flux mis en avant | dropdown | enumeration | `risers` | `risers` Biggest risers; `fallers` Biggest fallers; `top` Largest; `names` Named streams | Risers and fallers: from the first to the last point shown (or since the reference period when it is shown). |
| `dataColors.highlightN` | Number of streams | Nombre de flux | number | integer | `2` | 1 to 20 |  |
| `dataColors.highlightNames` | Stream names (separated by ;) | Noms des flux (séparés par ;) | text | text | (empty) |  |  |
| `dataColors.highlightColor` | Highlight color (empty = stream color) | Couleur mise en avant (vide = celle du flux) | color | fill | (empty) | hex color |  |
| `dataColors.othersColor` | Other streams color (empty = style gray) | Couleur des autres flux (vide = gris du style) | color | fill | (empty) | hex color |  |

### Streams / Flux (`streams`, Format pane)

**Layout / Disposition**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `streams.offset` | Layout | Disposition | dropdown | enumeration | `wiggle` | `wiggle` Flowing streams (streamgraph); `silhouette` Centered on the axis; `expand` 100% (shares of the total); `zero` Stacked areas (from zero) | Flowing streams: the baseline follows the streams to minimize slopes (Byron and Wattenberg streamgraph). Centered: symmetric around a line. 100%: each date adds up to 100%. Stacked areas: from zero, with a Y axis. |
| `streams.order` | Stream order | Ordre des flux | dropdown | enumeration | `insideOut` | `insideOut` Largest in the middle; `total` By total (largest at the bottom); `peak` By peak date ★; `name` By name (A → Z, bottom to top); `data` Data order; `custom` Custom order |  |
| `streams.customOrder` | Bottom-to-top order (names separated by ;) | Ordre de bas en haut (noms séparés par ;) | text | text | (empty) |  | Visible when `streams.order` = `custom`. Streams not listed follow, in "Largest in the middle" order. |
| `streams.reverse` | Reverse the order | Inverser l'ordre | toggle | bool | `false` | true / false |  |
| `streams.curve` | Edge shape | Forme des bords | dropdown | enumeration | `smooth` | `smooth` Smooth; `linear` Straight; `step` Step ★ |  |

**Look / Apparence**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `streams.fill` | Fill | Remplissage | dropdown | enumeration | `solid` | `solid` Solid; `gradient` Gradient toward the present ★; `hatch` Hatching (print, color blindness) |  |
| `streams.opacity` | Opacity (%) | Opacité (%) | number | integer | `92` | 10 to 100 |  |
| `streams.outline` | Separator between streams | Liseré entre les flux | toggle | bool | `true` | true / false |  |
| `streams.outlineWidth` | Separator width | Épaisseur du liseré | number | numeric | `0.8` | 0.2 to 4 | Visible when `streams.outline` = `true` |
| `streams.reveal` | Left-to-right reveal | Révélation de gauche à droite | toggle | bool | `true` | true / false | Streams draw along time when shown and when the data changes (never when the system asks to reduce motion). |

**Top N and "Others" ★ / Top N et « Autres » ★**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `streams.topN` | Show | Afficher | toggle | bool | `false` | true / false | Keeps the N largest streams (total over the period) and groups the rest into an "Others" stream. |
| `streams.n` | N | N | number | integer | `8` | 1 to 50 |  |
| `streams.othersLabel` | "Others" label | Libellé « Autres » | text | text | (empty) |  |  |
| `streams.othersColor` | "Others" color (empty = gray) | Couleur de « Autres » (vide = gris) | color | fill | (empty) | hex color |  |

### Stream labels / Étiquettes des flux (`streamLabels`, Format pane)

The card header toggle is `streamLabels.show`.

**Labels / Étiquettes**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `streamLabels.show` | Show | Afficher | toggle | bool | `true` | true / false | Writes each stream's name inside the stream, where it is thickest, without overlap; a stream that is too thin stays unlabeled (its name is in the legend and the tooltip). |
| `streamLabels.content` | Content | Contenu | dropdown | enumeration | `name` | `name` Name; `nameValue` Name and value at that point; `nameTotal` Name and total; `nameShare` Name and share of the total ★; `nameChange` Name and change vs. the reference period ★ |  |
| `streamLabels.placement` | Position | Position | dropdown | enumeration | `thickest` | `thickest` Where the stream is thickest; `end` Near the end; `start` Near the start |  |
| `streamLabels.autoSize` | Size follows stream thickness | Taille selon l'épaisseur du flux | toggle | bool | `true` | true / false |  |
| `streamLabels.fontSize` | Size (minimum when automatic) | Taille (minimale si automatique) | number | formatting | `10` | 6 to 24 |  |
| `streamLabels.maxSize` | Maximum size | Taille maximale | number | formatting | `15` | 6 to 40 | Visible when `streamLabels.autoSize` = `true` |
| `streamLabels.color` | Color (empty = automatic) | Couleur (vide = automatique) | color | fill | (empty) | hex color | Automatic: white or dark depending on the stream color. |
| `streamLabels.bold` | Bold | Gras | toggle | bool | `true` | true / false |  |
| `streamLabels.halo` | Text halo | Halo autour du texte | toggle | bool | `false` | true / false |  |
| `streamLabels.hideLegend` | Hide the legend | Masquer la légende | toggle | bool | `false` | true / false | Streams are named in the chart: the legend can go. |

**Numbers / Nombres**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `streamLabels.units` | Display units | Unités d'affichage | dropdown | enumeration | `auto` | `auto` Auto; `none` None; `k` Thousands; `m` Millions; `b` Billions |  |
| `streamLabels.decimals` | Decimals (-1 = auto) | Décimales (-1 = auto) | number | integer | `-1` | -1 to 6 |  |
| `streamLabels.prefix` | Prefix | Préfixe | text | text | (empty) |  |  |
| `streamLabels.suffix` | Suffix (e.g. €) | Suffixe (ex. €) | text | text | (empty) |  |  |

### Edge values ★ / Valeurs aux bords ★ (`edgeValues`, Format pane)

This card controls premium features (★): they work without a license key but show the watermark while in use.

The card header toggle is `edgeValues.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `edgeValues.show` | Show | Afficher | toggle | bool | `false` | true / false | Value of each stream at the first and last point, facing the stream, on both sides of the chart (without overlap). |
| `edgeValues.side` | Sides | Côtés | dropdown | enumeration | `both` | `both` Start and end; `end` End; `start` Start |  |
| `edgeValues.content` | Content | Contenu | dropdown | enumeration | `valueChange` | `value` Value; `share` Share of the total at that date; `valueChange` Value, and change at the end; `nameValue` Name and value |  |
| `edgeValues.fontSize` | Text size | Taille du texte | number | formatting | `9` | 6 to 20 |  |
| `edgeValues.colorBy` | Color | Couleur | dropdown | enumeration | `series` | `series` Stream color; `text` Text |  |
| `edgeValues.units` | Display units | Unités d'affichage | dropdown | enumeration | `auto` | `auto` Auto; `none` None; `k` Thousands; `m` Millions; `b` Billions |  |
| `edgeValues.decimals` | Decimals (-1 = auto) | Décimales (-1 = auto) | number | integer | `-1` | -1 to 6 |  |
| `edgeValues.prefix` | Prefix | Préfixe | text | text | (empty) |  |  |
| `edgeValues.suffix` | Suffix (e.g. €) | Suffixe (ex. €) | text | text | (empty) |  |  |

### Time axis / Axe de temps (`xAxis`, Format pane)

The card header toggle is `xAxis.show`.

**Values / Valeurs**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `xAxis.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `xAxis.fontSize` | Size | Taille | number | formatting | `9` | 6 to 24 |  |
| `xAxis.color` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color |  |
| `xAxis.labelMode` | Long labels | Étiquettes longues | dropdown | enumeration | `auto` | `auto` Automatic; `wrap` Two lines; `rotate45` Tilted (45°); `rotate90` Vertical; `truncate` Truncated (…) |  |
| `xAxis.maxSize` | Maximum room (% of the visual) | Place maximale (% du visuel) | number | integer | `30` | 10 to 60 |  |
| `xAxis.line` | Axis line | Trait de l'axe | toggle | bool | `true` | true / false |  |
| `xAxis.type` | Axis type | Type d'axe | dropdown | enumeration | `auto` | `auto` Automatic; `continuous` Continuous; `categorical` Categorical | Continuous: dates and numbers are spaced by their real gap. |
| `xAxis.dateFormat` | Date format | Format des dates | text | text | (empty) |  |  |

**Axis title / Titre de l'axe**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `xAxis.showTitle` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `xAxis.titleText` | Text | Texte | text | text | (empty) |  | Visible when `xAxis.showTitle` = `true` |

### Y axis / Axe Y (`yAxis`, Format pane)

The card header toggle is `yAxis.show`.

**Values / Valeurs**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `yAxis.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `yAxis.scaleBar` | Size scale (flowing and centered streams) | Échelle de grandeur (flux ondulants et centrés) | toggle | bool | `true` | true / false | Flowing and centered streams have no zero: instead of the axis, a vertical marker shows the thickness of a round value (e.g. ↕ 100k). |
| `yAxis.position` | Position | Position | dropdown | enumeration | `left` | `left` Left; `right` Right |  |
| `yAxis.fontSize` | Size | Taille | number | formatting | `9` | 6 to 24 |  |
| `yAxis.color` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color |  |
| `yAxis.units` | Display units | Unités d'affichage | dropdown | enumeration | `auto` | `auto` Auto; `none` None; `k` Thousands; `m` Millions; `b` Billions |  |
| `yAxis.decimals` | Decimals (-1 = auto) | Décimales (-1 = auto) | number | integer | `-1` | -1 to 6 |  |
| `yAxis.prefix` | Prefix | Préfixe | text | text | (empty) |  |  |
| `yAxis.suffix` | Suffix (e.g. €) | Suffixe (ex. €) | text | text | (empty) |  |  |
| `yAxis.line` | Axis line | Trait de l'axe | toggle | bool | `false` | true / false |  |

**Range / Échelle**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `yAxis.min` | Minimum | Minimum | text | text | (empty) |  | Stacked areas only (flowing, centered and 100% streams have their own scale). |
| `yAxis.max` | Maximum | Maximum | text | text | (empty) |  |  |
| `yAxis.ticks` | Number of ticks (approx.) | Nombre de graduations (environ) | number | integer | `5` | 2 to 20 |  |

**Axis title / Titre de l'axe**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `yAxis.showTitle` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `yAxis.titleText` | Text | Texte | text | text | (empty) |  | Visible when `yAxis.showTitle` = `true` |

### Gridlines / Quadrillage (`gridlines`, Format pane)

**Horizontal**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `gridlines.hShow` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `gridlines.hColor` | Color (empty = style grid) | Couleur (vide = grille du style) | color | fill | (empty) | hex color |  |
| `gridlines.hWidth` | Width | Épaisseur | number | numeric | `1` | 0.5 to 6 |  |
| `gridlines.hStyle` | Line style | Style de trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |
| `gridlines.zeroLine` | Zero line | Ligne du zéro | toggle | bool | `true` | true / false |  |

**Vertical**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `gridlines.vShow` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `gridlines.vColor` | Color (empty = style grid) | Couleur (vide = grille du style) | color | fill | (empty) | hex color |  |
| `gridlines.vWidth` | Width | Épaisseur | number | numeric | `1` | 0.5 to 6 |  |
| `gridlines.vStyle` | Line style | Style de trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |

### Legend / Légende (`legend`, Format pane)

The card header toggle is `legend.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `legend.show` | Show | Afficher | toggle | bool | `true` | true / false | Shown when the chart has several series. |
| `legend.position` | Position | Position | dropdown | enumeration | `top` | `top` Top; `bottom` Bottom; `right` Right; `left` Left |  |
| `legend.align` | Alignment | Alignement | dropdown | enumeration | `left` | `left` Start; `center` Center; `right` End | Visible when `legend.position` = `top` or `bottom` |
| `legend.showTitle` | Legend title | Titre de la légende | toggle | bool | `false` | true / false |  |
| `legend.titleText` | Title text | Texte du titre | text | text | (empty) |  | Visible when `legend.showTitle` = `true` |
| `legend.fontSize` | Size | Taille | number | formatting | `9` | 6 to 24 |  |
| `legend.color` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color |  |
| `legend.interactive` | Click = select the series | Clic = sélectionner la série | toggle | bool | `true` | true / false |  |

### Annotations ★ (`annotations`, Format pane)

This card controls premium features (★): they work without a license key but show the watermark while in use.

The card header toggle is `annotations.show`.

**Content / Contenu**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `annotations.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `annotations.list` | Annotations (one per line) | Annotations (une par ligne) | textarea | text | (empty) |  | "x \| text": vertical marker on the date; "x \| stream \| text": attached to the stream's layer; "x1..x2 \| text": shaded period. x = date (2024-03-15, 2024-03, 2024), number or category as displayed. Optional color #RRGGBB last ("… \| #C0392B"). "\n" starts a new line. The measure in the "Annotations (text)" field adds its own. |
| `annotations.content` | Displayed content | Contenu affiché | dropdown | enumeration | `text` | `text` Text; `textX` Text and date; `textValue` Text and value (stream) |  |
| `annotations.editOnChart` | Edit on the chart (edit mode) | Modifier sur le graphique (mode édition) | toggle | bool | `true` | true / false | In edit mode, annotations can be dragged, edited with a double-click and removed with × (single panel). |

**Look / Apparence**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `annotations.style` | Style | Style | dropdown | enumeration | `plain` | `bubble` Bubble; `filled` Filled label; `plain` Text only |  |
| `annotations.color` | Color (empty = secondary text or stream) | Couleur (vide = texte secondaire ou flux) | color | fill | (empty) | hex color |  |
| `annotations.fontSize` | Size | Taille | number | formatting | `9` | 6 to 24 |  |
| `annotations.bold` | Bold | Gras | toggle | bool | `true` | true / false |  |
| `annotations.maxWidth` | Maximum width (px) | Largeur maximale (px) | number | integer | `160` | 60 to 400 |  |

**Marker and connector / Repère et trait**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `annotations.anchor` | Vertical marker text | Texte des repères verticaux | dropdown | enumeration | `top` | `top` Top; `bottom` Bottom; `none` None (line only) |  |
| `annotations.lineStyle` | Line style | Style de trait | dropdown | enumeration | `dashed` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |
| `annotations.width` | Width | Épaisseur | number | numeric | `1` | 0.5 to 6 |  |
| `annotations.bandOpacity` | Periods opacity (%) | Opacité des périodes (%) | number | integer | `10` | 2 to 60 |  |
| `annotations.marker` | Marker on the stream | Repère sur le flux | toggle | bool | `true` | true / false |  |
| `annotations.connector` | Connector | Trait vers le flux | dropdown | enumeration | `line` | `line` Line; `none` None |  |
| `annotations.position` | Default position | Position par défaut | dropdown | enumeration | `auto` | `auto` Automatic (no overlap); `above` Above; `below` Below; `right` Right; `left` Left |  |
| `annotations.distance` | Distance from the point (px) | Distance au point (px) | number | integer | `18` | 6 to 160 |  |

### Navigator ★ / Navigateur ★ (`navigator`, Format pane)

This card controls premium features (★): they work without a license key but show the watermark while in use.

The card header toggle is `navigator.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `navigator.show` | Show | Afficher | toggle | bool | `false` | true / false | Mini chart under the streams: drag the window or its edges to zoom into a period, double-click to see everything again. The mouse wheel also zooms the chart. |
| `navigator.height` | Height (px) | Hauteur (px) | number | integer | `38` | 20 to 120 |  |
| `navigator.from` | Window start when opened | Début de la fenêtre à l'ouverture | text | text | (empty) |  | Date, year, number or category (e.g. 2024-01). Empty: from the start. |
| `navigator.to` | Window end when opened | Fin de la fenêtre à l'ouverture | text | text | (empty) |  |  |

### Small multiples / Petits multiples (`smallMultiples`, Format pane)

**Grid / Grille**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `smallMultiples.columns` | Columns (0 = automatic) | Colonnes (0 = automatique) | number | integer | `0` | 0 to 12 |  |
| `smallMultiples.gap` | Spacing (px) | Espacement (px) | number | integer | `14` | 0 to 60 |  |
| `smallMultiples.scale` | Stream scale | Échelle des flux | dropdown | enumeration | `shared` | `shared` Shared by all panels; `independent` Independent per panel ★ | Shared: the same value has the same thickness in every panel. |
| `smallMultiples.border` | Panel border | Cadre des panneaux | toggle | bool | `false` | true / false |  |

**Titles / Titres**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `smallMultiples.titleShow` | Title of each panel | Titre de chaque panneau | toggle | bool | `true` | true / false |  |
| `smallMultiples.titleSize` | Text size | Taille du texte | number | formatting | `10` | 6 to 24 | Visible when `smallMultiples.titleShow` = `true` |
| `smallMultiples.titleColor` | Color (empty = text) | Couleur (vide = texte) | color | fill | (empty) | hex color | Visible when `smallMultiples.titleShow` = `true` |
| `smallMultiples.titleTotal` | Total in the title | Total dans le titre | toggle | bool | `false` | true / false | Visible when `smallMultiples.titleShow` = `true` |

### Playback ★ / Lecture ★ (`play`, Format pane)

This card controls premium features (★): they work without a license key but show the watermark while in use.

**Playback / Lecture**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `play.start` | Frame shown on opening | Image affichée à l'ouverture | dropdown | enumeration | `last` | `last` The last one (most recent); `first` The first one |  |
| `play.speed` | Duration of a frame (ms) | Durée d'une image (ms) | number | integer | `400` | 100 to 10000 | At speed ×1; the speed button of the play bar multiplies it (×0.5 to ×4) for the session. |
| `play.loop` | Loop | Lecture en boucle | toggle | bool | `false` | true / false |  |
| `play.autoPlay` | Play automatically on opening | Lecture automatique à l'ouverture | toggle | bool | `false` | true / false | Once, from the first frame. Not when animations are reduced (Style › Animations or the system) nor on a dashboard tile. |
| `play.transition` | Animated transitions | Transitions animées | toggle | bool | `true` | true / false | Values, positions and colors move smoothly from one frame to the next. |

**Play bar / Barre de lecture**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `play.controls` | Play bar | Barre de lecture | toggle | bool | `false` | true / false | ▶ button, graduated slider, start / end and speed: a cursor travels through time and veils what comes next. The left-to-right reveal on loading (Streams card) stays free. |
| `play.position` | Bar position | Position de la barre | dropdown | enumeration | `bottom` | `bottom` Bottom; `top` Top | Visible when `play.controls` = `true` |
| `play.ticks` | Tick marks | Graduations | dropdown | enumeration | `auto` | `auto` Automatic; `all` Every frame; `none` None | Visible when `play.controls` = `true` |
| `play.tickLabels` | Tick labels | Étiquettes des graduations | toggle | bool | `true` | true / false | Visible when `play.controls` = `true` |
| `play.stepButtons` | Start and end buttons | Boutons début et fin | toggle | bool | `true` | true / false | Visible when `play.controls` = `true` |
| `play.speedButton` | Speed button | Bouton de vitesse | toggle | bool | `true` | true / false | Visible when `play.controls` = `true` |

**Large value / Valeur en grand**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `play.showLabel` | Current value in large type | Valeur en cours en grand | toggle | bool | `false` | true / false |  |
| `play.labelSize` | Large value size | Taille de la valeur en grand | number | formatting | `44` | 12 to 160 | Visible when `play.showLabel` = `true` |
| `play.labelPosition` | Large value position | Position de la valeur en grand | dropdown | enumeration | `bottomRight` | `bottomRight` Bottom right; `topRight` Top right; `topLeft` Top left; `bottomLeft` Bottom left; `center` Center | Visible when `play.showLabel` = `true` |

**More settings / Autres réglages**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `play.ranking` | Ranking at the cursor date ★ | Classement à la date du curseur ★ | toggle | bool | `false` | true / false | Box with the top streams (value and share) at the cursor date, updated during playback. |
| `play.rankCount` | Streams in the ranking | Flux dans le classement | number | integer | `5` | 1 to 20 | Visible when `play.ranking` = `true` |

### Interactions (`interaction`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `interaction.hover` | Highlight on hover | Mettre en avant au survol | toggle | bool | `true` | true / false |  |
| `interaction.dim` | Dimmed items opacity (%) | Opacité des éléments estompés (%) | number | integer | `25` | 5 to 80 |  |
| `interaction.crosshair` | Vertical guide on hover | Repère vertical au survol | toggle | bool | `true` | true / false |  |

### Reference period ★ / Période de référence ★ (`refPeriod`, Analytics pane)

This card controls premium features (★): they work without a license key but show the watermark while in use.

The card header toggle is `refPeriod.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `refPeriod.show` | Show | Afficher | toggle | bool | `false` | true / false | Shades a period (e.g. 2019 or 2020-01..2020-06) and compares each stream to its average over that period: change in the tooltip, in the labels and for highlighted streams. |
| `refPeriod.from` | Start (date, year, number or category) | Début (date, année, nombre ou catégorie) | text | text | (empty) |  |  |
| `refPeriod.to` | End (empty = same period) | Fin (vide = même période) | text | text | (empty) |  |  |
| `refPeriod.label` | Label | Libellé | text | text | (empty) |  |  |
| `refPeriod.shade` | Shade the period | Ombrer la période | toggle | bool | `true` | true / false |  |
| `refPeriod.color` | Color (empty = accent) | Couleur (vide = accent) | color | fill | (empty) | hex color |  |
| `refPeriod.opacity` | Opacity (%) | Opacité (%) | number | integer | `10` | 2 to 60 |  |
| `refPeriod.tooltip` | Change in the tooltip | Écart dans l'infobulle | toggle | bool | `true` | true / false |  |

### Reference lines / Lignes de référence (`reference`, Analytics pane)

**Line 1 / Ligne 1**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `reference.show1` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `reference.kind1` | Value | Valeur | dropdown | enumeration | `average` | `constant` Constant; `average` Average; `median` Median; `min` Minimum; `max` Maximum; `percentile` Percentile |  |
| `reference.value1` | Constant value | Valeur constante | number | numeric | `0` |  | Visible when `reference.kind1` = `constant` |
| `reference.pct1` | Percentile | Centile | number | integer | `90` | 1 to 99 | Visible when `reference.kind1` = `percentile` |
| `reference.label1` | Label | Libellé | text | text | (empty) |  |  |
| `reference.showValue1` | Show the value | Afficher la valeur | toggle | bool | `true` | true / false |  |
| `reference.color1` | Color (empty = accent) | Couleur (vide = accent) | color | fill | (empty) | hex color |  |
| `reference.style1` | Line style | Style de trait | dropdown | enumeration | `dashed` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |
| `reference.width1` | Width | Épaisseur | number | numeric | `1.5` | 0.5 to 6 |  |
| `reference.labelPos1` | Label position | Position du libellé | dropdown | enumeration | `end` | `end` End; `start` Start; `none` None |  |

**Line 2 / Ligne 2**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `reference.show2` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `reference.kind2` | Value | Valeur | dropdown | enumeration | `constant` | `constant` Constant; `average` Average; `median` Median; `min` Minimum; `max` Maximum; `percentile` Percentile |  |
| `reference.value2` | Constant value | Valeur constante | number | numeric | `0` |  | Visible when `reference.kind2` = `constant` |
| `reference.pct2` | Percentile | Centile | number | integer | `90` | 1 to 99 | Visible when `reference.kind2` = `percentile` |
| `reference.label2` | Label | Libellé | text | text | (empty) |  |  |
| `reference.showValue2` | Show the value | Afficher la valeur | toggle | bool | `true` | true / false |  |
| `reference.color2` | Color (empty = accent) | Couleur (vide = accent) | color | fill | (empty) | hex color |  |
| `reference.style2` | Line style | Style de trait | dropdown | enumeration | `dashed` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |
| `reference.width2` | Width | Épaisseur | number | numeric | `1.5` | 0.5 to 6 |  |
| `reference.labelPos2` | Label position | Position du libellé | dropdown | enumeration | `end` | `end` End; `start` Start; `none` None |  |

**Line 3 / Ligne 3**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `reference.show3` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `reference.kind3` | Value | Valeur | dropdown | enumeration | `median` | `constant` Constant; `average` Average; `median` Median; `min` Minimum; `max` Maximum; `percentile` Percentile |  |
| `reference.value3` | Constant value | Valeur constante | number | numeric | `0` |  | Visible when `reference.kind3` = `constant` |
| `reference.pct3` | Percentile | Centile | number | integer | `90` | 1 to 99 | Visible when `reference.kind3` = `percentile` |
| `reference.label3` | Label | Libellé | text | text | (empty) |  |  |
| `reference.showValue3` | Show the value | Afficher la valeur | toggle | bool | `true` | true / false |  |
| `reference.color3` | Color (empty = accent) | Couleur (vide = accent) | color | fill | (empty) | hex color |  |
| `reference.style3` | Line style | Style de trait | dropdown | enumeration | `dashed` | `solid` Solid; `dashed` Dashed; `dotted` Dotted |  |
| `reference.width3` | Width | Épaisseur | number | numeric | `1.5` | 0.5 to 6 |  |
| `reference.labelPos3` | Label position | Position du libellé | dropdown | enumeration | `end` | `end` End; `start` Start; `none` None |  |

**Reference band / Bande de référence**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `reference.band` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `reference.bandFrom` | From | De | number | numeric | `0` |  |  |
| `reference.bandTo` | To | À | number | numeric | `0` |  |  |
| `reference.bandLabel` | Label | Libellé | text | text | (empty) |  |  |
| `reference.bandColor` | Color (empty = accent) | Couleur (vide = accent) | color | fill | (empty) | hex color |  |
| `reference.bandOpacity` | Opacity (%) | Opacité (%) | number | integer | `12` | 2 to 60 |  |

### Tooltips / Infobulles (`tooltip`, Format pane)

The card header toggle is `tooltip.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `tooltip.show` | Show | Afficher | toggle | bool | `true` | true / false | Tooltip on hover (with the fields of the "Tooltips" well and report page tooltips). |
| `tooltip.tipAll` | Every stream at that date | Tous les flux de la date | toggle | bool | `false` | true / false | Otherwise the tooltip details the hovered stream: value, share, rank, change. |

### Title / Titre (`title`, Format pane)

The card header toggle is `title.show`.

**Title / Titre**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `title.text` | Text | Texte | text | text | (empty) |  | Leave empty for an automatic title built from the fields. |
| `title.fontSize` | Size | Taille | number | formatting | `14` | 7 to 40 |  |
| `title.bold` | Bold | Gras | toggle | bool | `true` | true / false |  |
| `title.italic` | Italic | Italique | toggle | bool | `false` | true / false |  |
| `title.underline` | Underline | Souligné | toggle | bool | `false` | true / false |  |
| `title.color` | Color (empty = text) | Couleur (vide = texte) | color | fill | (empty) | hex color |  |
| `title.bgColor` | Background color | Couleur d'arrière-plan | color | fill | (empty) | hex color |  |
| `title.align` | Horizontal alignment | Alignement horizontal | dropdown | enumeration | `left` | `left` Left; `center` Center; `right` Right |  |
| `title.wrap` | Text wrap | Retour automatique à la ligne | toggle | bool | `true` | true / false |  |

**Subtitle / Sous-titre**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.subtitle` | Subtitle | Sous-titre | text | text | (empty) |  | Several lines allowed: type \n to go to the next line. |
| `title.subFontSize` | Size | Taille | number | formatting | `11` | 7 to 30 | Visible when `title.subtitle` =  |
| `title.subColor` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color | Visible when `title.subtitle` =  |
| `title.subItalic` | Italic | Italique | toggle | bool | `false` | true / false | Visible when `title.subtitle` =  |

**Divider / Séparateur**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.divider` | Show divider | Afficher le séparateur | toggle | bool | `false` | true / false |  |
| `title.dividerColor` | Color (empty = lines) | Couleur (vide = traits) | color | fill | (empty) | hex color | Visible when `title.divider` = `true` |
| `title.dividerStyle` | Line style | Style de trait | dropdown | enumeration | `solid` | `solid` Solid; `dashed` Dashed; `dotted` Dotted | Visible when `title.divider` = `true` |
| `title.dividerWidth` | Width | Épaisseur | number | integer | `1` | 1 to 6 | Visible when `title.divider` = `true` |

**Spacing / Espacement**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `title.spaceBelow` | Space below the title (px) | Espace sous le titre (px) | number | integer | `4` | 0 to 40 |  |

### Source note / Note de source (`source`, Format pane)

The card header toggle is `source.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `source.show` | Show | Afficher | toggle | bool | `false` | true / false |  |
| `source.text` | Text | Texte | text | text | (empty) |  |  |
| `source.fontSize` | Size | Taille | number | formatting | `9` | 6 to 20 |  |
| `source.italic` | Italic | Italique | toggle | bool | `false` | true / false |  |
| `source.color` | Color (empty = secondary text) | Couleur (vide = texte secondaire) | color | fill | (empty) | hex color |  |
| `source.align` | Alignment | Alignement | dropdown | enumeration | `left` | `left` Left; `center` Center; `right` Right |  |

### Frame / Cadre (`container`, Format pane)

**Background / Arrière-plan**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.bgShow` | Background | Arrière-plan | toggle | bool | `false` | true / false |  |
| `container.bgColor` | Color | Couleur | color | fill | `#FFFFFF` | hex color | Visible when `container.bgShow` = `true` |
| `container.bgColor2` | Gradient end (optional) | Fin du dégradé (optionnel) | color | fill | (empty) | hex color | Visible when `container.bgShow` = `true` |
| `container.bgTransparency` | Transparency (%) | Transparence (%) | slider | numeric | `0` | 0 to 100 | Visible when `container.bgShow` = `true` |

**Border / Bordure**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.border` | Border | Bordure | toggle | bool | `false` | true / false |  |
| `container.borderColor` | Color (empty = lines) | Couleur (vide = traits) | color | fill | (empty) | hex color | Visible when `container.border` = `true` |
| `container.borderWidth` | Width | Épaisseur | number | integer | `1` | 0 to 6 | Visible when `container.border` = `true` |
| `container.radius` | Rounded corners | Coins arrondis | number | integer | `8` | 0 to 24 |  |

**Shadow / Ombre**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.shadow` | Shadow | Ombre | toggle | bool | `false` | true / false |  |
| `container.shadowColor` | Color (empty = soft) | Couleur (vide = douce) | color | fill | (empty) | hex color | Visible when `container.shadow` = `true` |
| `container.shadowSize` | Blur (px) | Flou (px) | number | integer | `12` | 0 to 40 | Visible when `container.shadow` = `true` |

**Spacing / Marges**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.padding` | Inner padding | Marge intérieure | number | integer | `8` | 0 to 40 |  |

### Language and numbers / Langue et nombres (`texts`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `texts.language` | Interface language | Langue de l'interface | dropdown | enumeration | `auto` | `auto` Same as Power BI; `fr` French; `en` English |  |
| `texts.numberLocale` | Number format locale (e.g. en-GB) | Format des nombres (ex. fr-FR) | text | text | (empty) |  | Thousands and decimal separators. Empty: same as Power BI. |

### Other objects (not in the Format pane cards above)

- `annotState`: `annotState.offsets` (text), internal state saved by the visual in edit mode (column widths, positions of dragged annotations); leave it alone.
- `events`: `events.show` (bool), `events.list` (text), `events.color` (fill), `events.fontSize` (formatting), `events.labelPos` (enumeration), `events.style` (enumeration), `events.width` (numeric), `events.bandOpacity` (integer).