# Bar Slicer Plume: technical reference for AI assistants

> Power BI custom visual by Plume Studio (Plume Visuals). Visual version **1.4.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 Bar Slicer 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/bar-slicer (French: https://plumevisuals.com/fr/visuels/bar-slicer)
- Summary: The list slicer that shows the weight of each value: measure bars, search, Top N, paste a list.
- Power BI visual GUID (`visualType`): `plumeBarSlicer7D3E91A64C2B4F0E9A15C8B2E6F4D701`
- 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

Bar Slicer Plume is a Power BI custom visual that works as a list slicer which also shows the weight of each value: next to every value, a bar and a figure for a measure (revenue, count…), plus its share of the total. Clicking values filters the rest of the report, like the native slicer. It adds accent-insensitive search, quick actions ("Top N ★", "Invert selection", "Paste a list ★" from Excel), sorting by the measure or by any other measure, a selection summary ("3 selected · 1.0M of 1.8M"; French « 3 sélectionné(s) · 1,0 M sur 1,8 M »), and three layouts: "List", "Tile grid ★" and "Chips ★".

**New in version 1.4.0.0 (30/10/2026):** Shared slicer cards (Preselection, Frame); tooltips use **each measure's own format** by default (`tooltip.format` = `model`), share of total can be hidden, fixed tile height; `items.*` layout settings moved to **Layout**.

## 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 (`style.customColors` and the colors under it) are **free**; every other `style.preset`, the other gradient palettes (`style.palette`) and `style.themeJson` ("Theme JSON ★") are **premium** (watermark without a key). See "Styles and theme JSON" below.
- Using a premium feature without a valid key shows **"Plume Visuals · Premium preview"** (French: « Plume Visuals · Aperçu premium ») in the footer of the visual, with an "Unlock →" link to the pricing page. It disappears once a key is pasted in **Format › Plume Studio License › License key** (`license.key`; French: « Licence Plume Studio › Clé de licence »), the **first card** of the Format pane.
- Premium features of Bar Slicer Plume:
  - the **"Top N ★"** button (`actions.topN`) and the **"Paste a list ★"** button (`actions.paste`): the buttons are shown by default, the watermark appears once one of them has been **clicked** and stays until the report is reopened;
  - `layout.mode` = `grid` ("Tile grid ★") or `chips` ("Chips ★");
  - a custom summary text in `summary.template` ("Text ★").
- In the Format pane, every premium option and premium list value has " ★" appended to its label and carries the description "Premium feature: usable for free with a « Premium preview » watermark…". The generated tables below star the same options.
- Accepted keys: only keys starting with `PLUM1.` shown in the buyer's account on plumevisuals.com. They are checked offline (Ed25519 signature) and must cover `bar-slicer` or the whole catalog. In edit mode, a wrong key shows "Invalid license key", "License expired (date)" or "This key does not cover this visual". `license.showOwner` displays "Licensed to <holder>".
- Licenses last one year (one-time payment, no automatic renewal, key accepted for 30 more days, reminders 30 and 7 days before the end), per segment: 19 € personal, 49 € SME, 149 € enterprise per year, or the full catalog pack. Renewing gives a new key to paste instead of the old one.

## Expected data shape

The visual reads **one row per distinct value of the Field**, with the measures evaluated for that value.

| Field (`category`) | Measure (bars) (`measure`) | Sort by (`sortBy`) |
|---|---|---|
| Lighting | 412 300 | 395 100 |
| Garden | 288 950 | 301 400 |
| … | … | … |

- **Field** (`category`, label "Field" / « Champ », grouping, exactly one column, required): the column to filter. Text, number and boolean columns work; a date column works too, but Period Plume is designed for dates.
- **Measure (bars)** (`measure`, « Mesure (barres) », one measure, optional): bar length, displayed value, share of total, and the ranking used by Top N. Without it the visual is a plain list (no bars, no Top N button). Share of total = value ÷ sum of the positive values of the list.
- **Sort by** (`sortBy`, « Trier par », one measure, optional): used only when `sort.by` = `sortDesc` / `sortAsc`.
- **Tooltips** (`tooltips`, « Infobulles », several measures, optional): added to the standard Power BI tooltip. Report-page tooltips are supported.
- Volume: 30,000 values per data window; more are fetched automatically up to a **fixed limit of 100,000 values**. Beyond that a warning icon is shown ("Only the first n values are loaded"; details: "The visual loads at most 100,000 values. Filter the page or use a less detailed column.") and the extra values are not listed. (There is no "Data" card any more since 1.0.1.0.)
- Values without data under the current filters are only received if **"Show items with no data"** is enabled on the field (right-click the field in the Field well). `layout.empty` then groups them at the bottom, dims them in place, or hides them.

## DAX recipes

```dax
// Measure (bars)
Revenue = SUM ( Sales[Amount] )
Orders = COUNTROWS ( Sales )

// Sort by: rank this year's list by last year's revenue
Revenue LY = CALCULATE ( [Revenue], SAMEPERIODLASTYEAR ( 'Date'[Date] ) )

// Tooltips
Average basket = DIVIDE ( [Revenue], [Orders] )
Margin % = DIVIDE ( SUM ( Sales[Margin] ), [Revenue] )
```

Power BI never filters a slicer by its own selection: the bars always show the measure under the *other* filters of the page.

## Filter sent to the report

A `BasicFilter` with operator `In` on the Field column (table and column taken from the field), for example `{ "target": { "table": "Sales", "column": "Category" }, "operator": "In", "values": ["Lighting", "Garden"] }`. No selection = filter removed.

- **Invert** sends `In` with the complementary values (values without data are left out), never `NotIn`.
- **Top N** sends `In` with the N values that have the highest measure *at the moment of the click*: it is a static selection, not a dynamic Top N.
- **Paste a list** matches the pasted values (one per line, or separated by `;` or `,`) against the list, then replaces or adds to the selection.

## Interactions with the report

- Click = toggle (`selection.mode` = `multi`), Ctrl + click (`multiCtrl`), or one value only (`single`, with `selection.forceOne` to always keep one value; it then selects the first value when nothing is selected). Alt + click = only this value (`selection.altOnly`), Shift + click = range (`selection.shiftRange`).
- Keyboard: ↑ ↓ Home End to move, Space / Enter to toggle, Ctrl + A to select all visible values, Ctrl + F to jump to the search box (no on-screen hint since 1.0.1.0), Esc clears the search. ARIA `listbox` / `option` roles and screen-reader announcements.
- Context menu on each value, Power BI tooltips, high contrast mode, landing page when no field is set, read-only behavior on dashboards.
- **Bookmarks** and **Sync slicers** (View › Sync slicers) work: the visual declares `supportsSynchronizingFilterState` and re-reads the restored filter. Values that are filtered out by other slicers stay selected.
- Other visuals cross-filter Bar Slicer Plume (it does not support highlighting).

## Format pane: how to read the tables below

- Each option has an ID `card.option` (for example `bars.position`). The card is the capabilities.json **object name**, the option is the **property name**.
- Card order: `license` (always first), `style` (Style card shared by every Plume visual: `preset`, `themeJson`, `followTheme`, then `customColors`, the colors, `palette` (Gradient palette), font, size, density, radius, animations), `header`, then the visual's own cards (`selection`, `search`, `actions`, `sort`, `bars`, `values`, `layout`, `summary`), then `container` and `texts`. Format pane in version 1.4.0.0 (30/10/2026), top to bottom: `license`, `style`, `header`, `layout`, `selection`, `bars`, `values`, `sort`, `search`, `actions`, `summary`, `preselect`, `tooltip`, `container`, `texts`. Settings moved or renamed in this version keep working in older reports (the old names are still read).
- Labels follow the language of Power BI Desktop (File › Options › Regional settings › Application language); `texts.language` can force French or English inside the visual. Data role labels are translated too.
- "Visible when" means the option only appears when another option has one of the listed values.
- `general.filter` is where Power BI stores the filter applied by the visual: never write it by hand.

## Editing a PBIP report (visual.json)

`visualType` is the visual GUID, `queryState` keys are the data role names, `objects` keys are the option IDs. Literal syntax: booleans `true` / `false`, numbers suffixed with `D`, strings and enumeration values in single quotes, colors wrapped in `solid.color`.

```json
{
  "visualType": "plumeBarSlicer7D3E91A64C2B4F0E9A15C8B2E6F4D701",
  "query": {
    "queryState": {
      "category": { "projections": [ { "field": { "Column":  { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Category" } }, "queryRef": "Sales.Category", "nativeQueryRef": "Category" } ] },
      "measure":  { "projections": [ { "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Revenue" } }, "queryRef": "Sales.Revenue", "nativeQueryRef": "Revenue" } ] },
      "tooltips": { "projections": [ { "field": { "Measure": { "Expression": { "SourceRef": { "Entity": "Sales" } }, "Property": "Orders" } }, "queryRef": "Sales.Orders", "nativeQueryRef": "Orders" } ] }
    }
  },
  "objects": {
    "selection": [ { "properties": { "mode": { "expr": { "Literal": { "Value": "'single'" } } },
                                      "indicator": { "expr": { "Literal": { "Value": "'radio'" } } } } } ],
    "bars":      [ { "properties": { "position": { "expr": { "Literal": { "Value": "'background'" } } },
                                      "colorOn": { "solid": { "color": { "expr": { "Literal": { "Value": "'#b8462a'" } } } } } } } ],
    "actions":   [ { "properties": { "topNCount": { "expr": { "Literal": { "Value": "10D" } } } } } ],
    "values":    [ { "properties": { "suffix": { "expr": { "Literal": { "Value": "' €'" } } } } } ],
    "license":   [ { "properties": { "key": { "expr": { "Literal": { "Value": "'PLUM1.…'" } } } } } ]
  }
}
```

The custom visual package must also be embedded in the report (Power BI does this when the visual is imported from AppSource or from the `.pbiviz` file).

## Styles and theme JSON

- `style.preset` takes one of the 20 style IDs shared by every Plume visual: `none`, `minimal`, `blackWhite`, `press`, `vintage`, `earth`, `nordic`, `executive`, `accessible`, `pastel`, `bauhaus`, `climate`, `blueprint`, `unknownPleasures`, `dark`, `neon`, `terminal`, `infographic`, `cockpit`, `hologram`.
- `style.themeJson` (Format › Style › Theme JSON ★) takes a JSON theme as plain text. Format v2: an object with an optional `extends` (a style ID above) and optional groups `colors`, `palettes`, `typography`, `shape`, `table`, `marks`, `effects`; the v1 flat format (`style`, `palette`, `accent`, `background`…) is still read. Every field is optional. Colors are `#RRGGBB` (`#RGB` and `#RRGGBBAA` accepted, opacity ignored). Unknown fields and values outside the allowed lists are ignored, out-of-range numbers are clamped. Invalid JSON shows "Invalid theme JSON: ignored" in edit mode and the visual keeps its look.
- Full field list with allowed values, examples and troubleshooting: tutorial https://plumevisuals.com/ai/tutorials/en/themes-json.md (French: https://plumevisuals.com/ai/tutorials/fr/themes-json.md). The same JSON can be pasted in every Plume visual of a page.
- Priority (the last one wins): visual defaults → `style.preset` → `style.themeJson` → `style.palette` (if not "Style or theme palette") → `style.followTheme` → custom colors → options set by hand in the other cards → DAX formats (fx button, "Dynamic format" field) → Windows high contrast.
- What this slicer uses from a theme JSON: `colors` (`background`, `foreground`, `muted`, `grid`, `accent`, `borderColor`, `glowColor`), `typography` (`fontFamily`, `titleFamily`, `headerCase`, `letterSpacing`), `shape` (`radius`, `border`, `borderWidth`, `borderStyle`, `shadow`) and `effects` (`glow`, `texture`). `fontFamily`, `radius`, `border`, `borderWidth` and `shadow` only apply while the matching Format pane options are left at their default. The `palettes`, `table` and `marks` groups and the other fields (`surface`, `background2`, `stroke`, `accent2`, `positive`, `negative`, `numberFamily`…) are accepted but have no visible effect on it.

## Common pitfalls

- No bars and no Top N button: no measure in Measure (bars), or `bars.show` / `actions.topN` is off.
- Some values disappear when the page is filtered: enable "Show items with no data" on the field, then choose `layout.empty`.
- Month names sorted by the measure: set `sort.by` = `data` (model order) and "Sort by column" on the month number in the model, or `labelAsc` with `sort.natural` for codes like "M2" / "M10".
- The visual selects a value on its own: `selection.forceOne` is on in single mode.
- Warning icon "Only the first n values are loaded" ("The visual loads at most 100,000 values. Filter the page or use a less detailed column."): more than 100,000 distinct values; filter the page or use a coarser column.
- Watermark visible: a ★ layout or summary text is set, or "Top N ★" / "Paste a list ★" was clicked, or a ★ style, palette or theme JSON, without a valid key. Free features never show it.
- The visual makes no network request: data and license key stay in the report.

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

Several fields or a hierarchy in one slicer (use Filter Bar Plume), tree / parent-child levels, dropdown or collapsed mode, images or icons per value, colors driven by a field or a measure (conditional formatting per value), dynamic Top N re-evaluated at each refresh, exclude mode (`NotIn`), filtering on a measure value, numeric range or date range selection (use Range Plume or Period Plume), saved selection lists, export of the list.

## 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 |
|---|---|---|---|---|---|
| `category` | Field | Champ | column | 1 |  |
| `measure` | Measure (bars) | Mesure (barres) | measure | 1 |  |
| `sortBy` | Sort by | Trier par | measure | 1 |  |
| `tooltips` | Tooltips | Infobulles | measure | several |  |
| `preselect` | Preselection | Présélection | measure | 1 | Optional measure returning the value(s) selected when the report opens, e.g. "Paris;Lyon" or "2026-01-01;2026-03-31" |
| `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 = `category` (one row per combination), 30,000 rows per data window (more fetched automatically); measures = `measure`, `sortBy`, `tooltips`, `preselect`, `format`.
Capabilities: supportsKeyboardFocus, supportsMultiVisualSelection, supportsLandingPage, supportsEmptyDataView, supportsSynchronizingFilterState.
Network access: none (no privileges requested, no external request).

## Format pane options (125)

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. |

**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.colorTrack` | Bar track | Fond des barres | 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` |  |  |
| `style.fontSize` | Text size | Taille du texte | number | formatting | `12` | 8 to 28 |  |
| `style.density` | Density | Densité | dropdown | enumeration | `normal` | `compact` Compact; `normal` Normal; `comfortable` Comfortable |  |

**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. |

### Header / En-tête (`header`, Format pane)

The card header toggle is `header.show`.

**Title / Titre**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `header.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `header.title` | Text | Texte | text | text | (empty) |  | Leave empty to use the field name. |
| `header.fontSize` | Size | Taille | number | formatting | `14` | 7 to 36 |  |
| `header.bold` | Bold | Gras | toggle | bool | `true` | true / false |  |
| `header.italic` | Italic | Italique | toggle | bool | `false` | true / false |  |
| `header.underline` | Underline | Souligné | toggle | bool | `false` | true / false |  |
| `header.color` | Color (empty = text) | Couleur (vide = texte) | color | fill | (empty) | hex color |  |
| `header.bgColor` | Background color | Couleur d'arrière-plan | color | fill | (empty) | hex color |  |
| `header.align` | Horizontal alignment | Alignement horizontal | dropdown | enumeration | `left` | `left` Left; `center` Center; `right` Right |  |
| `header.wrap` | Text wrap | Retour automatique à la ligne | toggle | bool | `true` | true / false | A long title goes on two lines instead of being cut. |

**Divider / Séparateur**

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

**Count and Clear button / Décompte et bouton Effacer**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `header.showCount` | Show value / selection count | Afficher le nombre de valeurs / sélection | toggle | bool | `true` | true / false |  |
| `header.showClear` | "Clear" button | Bouton « Effacer » | toggle | bool | `true` | true / false |  |
| `header.clearLabel` | Clear button label | Libellé du bouton Effacer | text | text | (empty) |  | Visible when `header.showClear` = `true` |

### Layout / Disposition (`layout`, Format pane)

**Slicer style / Style du segment**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `layout.mode` | Style | Style | dropdown | enumeration | `list` | `list` Vertical list; `grid` Tile grid ★; `chips` Chips (horizontal) ★ |  |
| `layout.columns` | Columns | Colonnes | number | integer | `2` | 1 to 8 | Visible when `layout.mode` = `grid` |
| `layout.tileHeight` | Fixed tile height (px, 0 = auto) | Hauteur fixe des tuiles (px, 0 = auto) | number | integer | `0` | 0 to 300 | Visible when `layout.mode` = `grid`. Like "Fixed size" in the button slicer: tiles keep their height, a scroll bar appears when needed. |

**Rows / Lignes**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `layout.labelWidth` | Label width (%) | Largeur des libellés (%) | number | integer | `38` | 15 to 70 | Visible when `layout.mode` = `list` |
| `layout.wrap` | Wrap labels | Libellés sur plusieurs lignes | toggle | bool | `false` | true / false |  |
| `layout.alternate` | Alternate rows | Lignes alternées | toggle | bool | `false` | true / false | Visible when `layout.mode` = `list` |
| `layout.separators` | Separators | Séparateurs | toggle | bool | `false` | true / false | Visible when `layout.mode` = `list` |
| `layout.selectedBg` | Tinted background when selected | Fond coloré si sélectionné | toggle | bool | `true` | true / false |  |

**Blank values and items with no data / Valeurs vides et sans données**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `layout.blankLabel` | Blank label | Libellé des vides | text | text | (empty) |  |  |
| `layout.empty` | Values without data | Valeurs sans données | dropdown | enumeration | `group` | `group` Grouped at the bottom, dimmed; `inline` In place, dimmed; `hide` Hidden | Activate "Show items with no data" on the field to receive them. |
| `layout.emptyLabel` | Empty group title | Titre du groupe vide | text | text | (empty) |  | Visible when `layout.empty` = `group` |

### Selection / Sélection (`selection`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `selection.mode` | Mode | Mode | dropdown | enumeration | `multi` | `multi` Multiple (click = toggle); `multiCtrl` Multiple with Ctrl; `single` Single value |  |
| `selection.indicator` | Indicator | Indicateur | dropdown | enumeration | `auto` | `auto` Automatic; `checkbox` Checkbox; `radio` Radio button; `none` None (highlight) |  |
| `selection.forceOne` | Always keep one value selected | Toujours une valeur sélectionnée | toggle | bool | `false` | true / false | Visible when `selection.mode` = `single` |
| `selection.altOnly` | Alt + click: only this value | Alt + clic : seulement cette valeur | toggle | bool | `true` | true / false |  |
| `selection.shiftRange` | Shift + click: select a range | Maj + clic : sélectionner une plage | toggle | bool | `true` | true / false |  |
| `selection.selectAll` | "Select all" row | Ligne « Tout sélectionner » | toggle | bool | `false` | true / false | Visible when `selection.mode` = `multi` or `multiCtrl` |
| `selection.selectAllLabel` | "Select all" label | Libellé « Tout sélectionner » | text | text | (empty) |  | Visible when `selection.selectAll` = `true` |
| `selection.selectedFirst` | Move selection to the top | Remonter la sélection en tête | toggle | bool | `false` | true / false |  |

### Bars / Barres (`bars`, Format pane)

The card header toggle is `bars.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `bars.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `bars.position` | Position | Position | dropdown | enumeration | `inline` | `inline` Between label and value; `below` Below the label; `background` Row background |  |
| `bars.scale` | Scale | Échelle | dropdown | enumeration | `max` | `max` Relative to maximum; `total` Share of total |  |
| `bars.thickness` | Thickness | Épaisseur | number | integer | `8` | 2 to 30 | Visible when `bars.position` = `inline` or `below` |
| `bars.rounded` | Rounded ends | Bouts arrondis | toggle | bool | `true` | true / false |  |
| `bars.track` | Show track | Afficher le rail | toggle | bool | `true` | true / false |  |
| `bars.colorOn` | Selected color (empty = accent) | Couleur sélection (vide = accent) | color | fill | (empty) | hex color |  |
| `bars.colorOff` | Unselected color (empty = auto) | Couleur hors sélection (vide = auto) | color | fill | (empty) | hex color |  |
| `bars.colorNegative` | Negative values color | Couleur des valeurs négatives | color | fill | `#c0392b` | hex color |  |
| `bars.minWidth` | Minimum width (px) | Largeur minimale (px) | number | integer | `60` | 20 to 400 | Visible when `bars.position` = `inline` |

### Displayed values / Valeurs affichées (`values`, Format pane)

The card header toggle is `values.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `values.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `values.display` | Content | Contenu | dropdown | enumeration | `value` | `value` Value; `percent` Share of total; `both` Value and share |  |
| `values.units` | Display units | Unités | dropdown | enumeration | `auto` | `auto` Auto; `none` None; `k` Thousands; `m` Millions; `b` Billions |  |
| `values.decimals` | Decimals (-1 = auto) | Décimales (-1 = auto) | number | integer | `-1` | -1 to 6 |  |
| `values.prefix` | Prefix | Préfixe | text | text | (empty) |  |  |
| `values.suffix` | Suffix (e.g. €) | Suffixe (ex. €) | text | text | (empty) |  |  |
| `values.color` | Color (empty = secondary) | Couleur (vide = secondaire) | color | fill | (empty) | hex color |  |
| `values.mono` | Tabular figures | Chiffres alignés (tabulaires) | toggle | bool | `true` | true / false |  |

### Sort / Tri (`sort`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `sort.by` | Sort by | Trier par | dropdown | enumeration | `valueDesc` | `valueDesc` Measure, descending; `valueAsc` Measure, ascending; `labelAsc` Label A → Z; `labelDesc` Label Z → A; `sortDesc` "Sort by" field, descending; `sortAsc` "Sort by" field, ascending; `data` Model order |  |
| `sort.natural` | Natural sort (2 before 10) | Tri naturel (2 avant 10) | toggle | bool | `true` | true / false |  |
| `sort.userToggle` | Sort toggle in the visual | Bouton de tri dans le visuel | toggle | bool | `true` | true / false |  |

### Search / Recherche (`search`, Format pane)

The card header toggle is `search.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `search.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `search.placeholder` | Placeholder | Texte indicatif | text | text | (empty) |  |  |
| `search.match` | Matching | Correspondance | dropdown | enumeration | `contains` | `contains` Contains; `starts` Starts with; `words` Word start |  |
| `search.highlight` | Highlight matches | Surligner le texte trouvé | toggle | bool | `true` | true / false |  |
| `search.selectResults` | "Select results" button | Bouton « Sélectionner les résultats » | toggle | bool | `true` | true / false |  |

### Quick actions / Actions rapides (`actions`, Format pane)

The card header toggle is `actions.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `actions.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `actions.topN` | Top N ★ | Top N ★ | toggle | bool | `true` | true / false |  |
| `actions.topNCount` | N | N | number | integer | `5` | 1 to 100 | Visible when `actions.topN` = `true` |
| `actions.invert` | Invert selection | Inverser la sélection | toggle | bool | `true` | true / false |  |
| `actions.paste` | Paste a list ★ | Coller une liste ★ | toggle | bool | `true` | true / false |  |
| `actions.style` | Style | Style | dropdown | enumeration | `chips` | `chips` Text chips; `icons` Icons only |  |

### Selection summary / Résumé de la sélection (`summary`, Format pane)

The card header toggle is `summary.show`.

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `summary.show` | Show | Afficher | toggle | bool | `true` | true / false |  |
| `summary.template` | Text ★ | Texte ★ | text | text | (empty) |  | Tokens: {n} selected count, {count} values, {sel} selected measure, {total} total measure, {pct} share. |
| `summary.showShare` | Share of total on the right | Part du total à droite | toggle | bool | `true` | true / false |  |
| `summary.hideWhenEmpty` | Hide when nothing selected | Masquer sans sélection | toggle | bool | `true` | true / false |  |

### Preselection / Présélection (`preselect`, Format pane)

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `preselect.when` | Apply | Appliquer | dropdown | enumeration | `session` | `session` Once per session; `always` Reapply on every display | Drop in "Preselection" a measure that returns a value or a list ("Paris;Lyon"): the slicer selects it when the report opens. Premium feature ★. |
| `preselect.force` | Force | Forcer | toggle | bool | `false` | true / false | Replaces an existing selection: saved in the report, recalled by a bookmark or by persistent filters. Otherwise it is kept. |
| `preselect.separator` | Value separator | Séparateur des valeurs | text | text | `;` |  |  |
| `preselect.warn` | Report values not found (edit mode) | Signaler les valeurs introuvables (mode édition) | toggle | bool | `true` | true / false |  |

### 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.format` | Measure format | Format des mesures | dropdown | enumeration | `model` | `model` Each measure's format (model); `visual` Visual format (Displayed values) | Each measure of the "Tooltips" well keeps its own format (%, €, decimals), as in native visuals. |
| `tooltip.share` | Share of total | Part du total | toggle | bool | `true` | true / false |  |

### 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` |
| `container.transparent` | Transparent background | Fond transparent | toggle | bool | `false` | true / false | The visual lets what is behind it show through (useful for a dropdown placed over another visual). |

**Border / Bordure**

| Option ID | Label (EN) | Label (FR) | Control | Type | Default | Allowed values | Notes |
|---|---|---|---|---|---|---|---|
| `container.border` | Border | Bordure | toggle | bool | `true` | 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 | `10` | 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)

- `items`: `items.layout` (enumeration), `items.columns` (integer), `items.labelWidth` (integer), `items.wrap` (bool), `items.alternate` (bool), `items.separators` (bool), `items.selectedBg` (bool), `items.blankLabel` (text), `items.empty` (enumeration), `items.emptyLabel` (text).
- `general`: `general.filter` (filter), used by Power BI to store the filter applied by the visual.
