> ## Documentation Index
> Fetch the complete documentation index at: https://learn.nextedy.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Sheet Header

> Reference for the Nextedy POWERSHEET sheet header -- the title, subtitle, and icon that state which slice of Siemens Polarion ALM data is on screen, each a static value or a dynamic expression over document, project, and URL-parameter context.

export const LastReviewed = ({date}) => {
  if (!date) return null;
  const formatted = new Date(`${date}T00:00:00Z`).toLocaleDateString("en-US", {
    year: "numeric",
    month: "long",
    day: "numeric",
    timeZone: "UTC"
  });
  return <p className="mt-10 text-sm text-gray-400 dark:text-zinc-500 not-prose">
      Last reviewed on {formatted}
    </p>;
};

The header sits at the top of a sheet, next to the toolbar, and states **which slice of data you are looking at** -- a `title`, a `subtitle`, and an `icon`. Because each can be computed from the current document, project, and URL parameters, one configuration used across many variants or projects tells you at a glance that you are on the right one, without going back to Polarion to check.

Each of the three is either a static value or a single [dynamic value expression](/powersheet/reference/sheet-config/dynamic-expressions) (`() => …`). They are top-level keys in the sheet configuration, alongside `sources`, `columns`, and `views`:

```yaml theme={null}
title:    "Requirements"
subtitle: "() => context.project.name"
icon:     "Table"
```

## The three fields

| Key        | Type                             | What it shows                                                                                                                                    |
| ---------- | -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ |
| `title`    | `string` \| `() => …`            | The primary heading. Falls back to the document name when it resolves to nothing (see [Fallback and suppression](#fallback-and-suppression)).    |
| `subtitle` | `string` \| `() => …` \| `false` | A secondary line above the title. Defaults to the document name when a `title` is set; `false` (or an expression resolving falsy) hides it.      |
| `icon`     | `string` \| `() => …` \| `false` | A glyph or image shown beside the title. Defaults to the `table` glyph; `false` (or an expression resolving falsy) is the only way to show none. |

## Evaluation context

A `() => …` header expression receives the same `context` object as other dynamic values, so the header can be driven by the sheet's surroundings. The fields most relevant here:

| Expression                  | Resolves to                                                                                                         |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| `context.name`              | The current document (configuration) name -- the same value the header falls back to.                               |
| `context.project.name`      | The Polarion project's display name. Optional: a project may expose only its id, in which case this is absent.      |
| `context.project.id`        | The Polarion project id.                                                                                            |
| `context.parameters.<name>` | Any value present on the sheet's [URL query string](/powersheet/concepts/url-parameters), by the name it was given. |

For the complete object see [Context Expressions](/powersheet/reference/data-model/context-expressions). Reading a value from the URL is covered under [URL Parameters](/powersheet/concepts/url-parameters).

<Tip>
  Build any surrounding text **inside** the expression -- the whole value must be a single `() => …` for it to be evaluated. Concatenate or use a template literal (`` () => `Type: ${context.parameters.subtype}` ``) rather than mixing literal text with an expression.
</Tip>

## Icon values: glyph or image

The `icon` value is classified automatically by what it contains:

* A name made up only of letters and digits -- for example `Table`, `AspectRatio`, `World` -- is a **[Fluent (MDL2) glyph](https://developer.microsoft.com/en-us/fluentui#/styles/web/icons#available-icons)**, rendered by name.
* Any value containing a `/`, `:`, or `.` is treated as an **image source** and rendered as an `<img>`. That covers every practical image form:

| Value                                         | Interpreted as                                        |
| --------------------------------------------- | ----------------------------------------------------- |
| `AspectRatio`                                 | Fluent glyph, by name                                 |
| `/polarion/icons/avatar/admin/avatar.png`     | Image -- a root-relative Polarion (or app) asset path |
| `https://cdn.example.com/icons/worksheet.png` | Image -- an absolute URL                              |
| `data:image/svg+xml;base64,PHN2Zy8+`          | Image -- an inline data URI                           |

The rule is purely the presence of a `/`, `:`, or `.`, so even a bare filename with an extension (`worksheet.png`) is taken as an image rather than a glyph. If an image source fails to load, the icon is simply omitted rather than showing a broken-image placeholder.

## Fallback and suppression

Each field decides independently what to show when it is omitted or resolves to nothing. An expression that resolves to a falsy value (`false`, `null`, `""`, `undefined`) **suppresses** the field -- it never prints the literal text `false`.

| Field      | Omitted                                                  | Resolves falsy                        | Explicit `false`                           |
| ---------- | -------------------------------------------------------- | ------------------------------------- | ------------------------------------------ |
| `title`    | Document name                                            | Document name (never a blank heading) | -- not supported; `title` takes no `false` |
| `subtitle` | Document name **if a `title` is set**, otherwise nothing | Hidden                                | Hidden                                     |
| `icon`     | The `table` glyph                                        | Hidden                                | Hidden                                     |

Two consequences worth noting:

* Because `icon` defaults to the `table` glyph, `icon: false` is the **only** way to render a sheet with no icon.
* A `title` that evaluates to empty behaves exactly like an omitted `title`: the document name becomes the heading, and (unless you set a `subtitle`) it is not also repeated as the subtitle.

## Worked example

This RTM configuration varies all three fields by a `subtype` URL parameter, so `…&subtype=electrical` and `…&subtype=mechanical` open the same sheet under distinct, self-describing headers -- while a plain link with no `subtype` falls back to the document's own name and the default icon:

```yaml theme={null}
icon: >
  () => {
    switch (context.parameters.subtype) {
      case 'electrical': return 'AspectRatio';                                 // Fluent glyph
      case 'mechanical': return 'World';                                       // Fluent glyph
      case 'absolute':   return 'https://cdn.example.com/icons/worksheet.png'; // absolute URL -> image
      case 'relative':   return '/polarion/icons/avatar/admin/avatar.png';     // Polarion asset -> image
      default:           return 'table';                                       // fallback glyph
    }
  }

subtitle: "() => context.parameters.subtype ? context.project.name + ': ' + context.name : false"

title: "() => context.parameters.subtype ? `Type: ${context.parameters.subtype}` : context.name"
```

With `…&subtype=electrical` the header reads **Type: electrical** over a project-and-document subtitle, beside the `AspectRatio` glyph. Open the same sheet with no `subtype` and the subtitle's expression resolves `false` (so it is hidden), the title falls back to the document name, and the icon defaults to `table`.

## Related

<Columns cols={2}>
  <Card title="Dynamic Value Expressions" icon="code" href="/powersheet/reference/sheet-config/dynamic-expressions">
    The `() => …` syntax used by all three header fields.
  </Card>

  <Card title="URL Parameters" icon="link" href="/powersheet/concepts/url-parameters">
    How `context.parameters.<name>` values reach the header from the sheet's URL.
  </Card>

  <Card title="Context Expressions" icon="cube" href="/powersheet/reference/data-model/context-expressions">
    The full `context` object a header expression can read.
  </Card>

  <Card title="Open a Scoped Sheet with URL Parameters" icon="wrench" href="/powersheet/guides/sheet-configuration/parametrize-sheet-url">
    A task that reflects a URL parameter in the header.
  </Card>
</Columns>

<LastReviewed date="2026-07-28" />
