# Types: LegalFeedSection to ContentBadgeProps (/themes/sdk/reference/content/types-2)

```ts
import { … } from '@poltura/theme-sdk/content';
```

## `LegalFeedSection` [#legalfeedsection]

A section the store's product feeds add to a legal document, such as the data shared with a price comparison site.

<TypeTable type={{"id":{"description":"The section's stable key.","type":"string","required":true},"title":{"description":"The section heading.","type":"string","required":true},"effective":{"description":"When the section took effect, already worded.","type":"string","required":true},"paragraphs":{"description":"The section's paragraphs, as plain text.","type":"readonly string[]","required":true}}} />

## `LegalPage` [#legalpage]

The legal document a legal page shows, such as the terms of service or the privacy policy.

<TypeTable type={{"slug":{"description":"The document's address segment, such as `terms-of-service`.","type":"string","required":true},"title":{"description":"The document's title.","type":"string","required":true},"markdown":{"description":"The document's body in Markdown; render it with `Markdown`.","type":"string","required":true},"effectiveLabel":{"description":"When this version took effect, already worded, or null.","type":"string | null","required":true},"feedSections":{"description":"Sections the store's product feeds add after the body.","type":"readonly LegalFeedSection[]","required":true},"isOlderVersion":{"description":"Whether the page shows an earlier version rather than the one in force.","type":"boolean","required":true},"currentHref":{"description":"The page of the version in force.","type":"string","required":true},"previousVersions":{"description":"Earlier versions, newest first.","type":"readonly LegalVersion[]","required":true},"texts":{"description":"The page's fixed wording in the page language.","type":"LegalPageTexts","required":true}}} />

## `LegalPageTexts` [#legalpagetexts]

The fixed wording of a legal page.

<TypeTable type={{"olderVersion":{"description":"The notice shown on an earlier version.","type":"string","required":true},"viewCurrentVersion":{"description":"The link from an earlier version to the version in force.","type":"string","required":true},"previousVersions":{"description":"The heading of the earlier versions list.","type":"string","required":true}}} />

## `LegalVersion` [#legalversion]

An earlier version of a legal document, still readable on its own address.

<TypeTable type={{"id":{"description":"The version's id.","type":"string","required":true},"label":{"description":"The version's name, such as `Version 3`.","type":"string","required":true},"effectiveFrom":{"description":"When the version took effect, already formatted, or null.","type":"string | null","required":true},"href":{"description":"The version's page.","type":"string","required":true}}} />

## `ProductFile` [#productfile]

A file the product's buyers download after purchase; before purchase it is listed without a link.

<TypeTable type={{"id":{"description":"The file's id.","type":"string","required":true},"title":{"description":"The name shown to shoppers, such as `Office 2024 installer`.","type":"string","required":true},"fileName":{"description":"The file name buyers download, such as `office-2024.exe`.","type":"string","required":true},"mimeType":{"description":"The file's MIME type.","type":"string","required":true},"sizeBytes":{"description":"The file size in bytes.","type":"number","required":true},"version":{"description":"The version the file is for, or null.","type":"string | null","required":true},"language":{"description":"The language the file is in: a language code such as `hu`, `multi` for several languages, or null.","type":"string | null","required":true},"variantId":{"description":"The variant whose buyers get it, or null when every variant's buyers do.","type":"string | null","required":true}}} />

## `RichTextValue` [#richtextvalue]

Merchant-written rich text, already sanitised by the host; render it with `RichText`.

<TypeTable type={{"html":{"description":"The sanitised HTML.","type":"string","required":true}}} />

## `MarkdownProps` [#markdownprops]

Props of [`Markdown`](/themes/sdk/reference/content/parts-1#markdown).

<TypeTable type={{"source":{"description":"The Markdown to draw; raw HTML in it is sanitised.","type":"string","required":true},"density":{"description":"Tighter spacing, for short answers inside cards.","type":"'regular' | 'compact'","required":false},"className":{"description":"Classes added to the wrapper.","type":"string","required":false}}} />

## `RichTextProps` [#richtextprops]

Props of [`RichText`](/themes/sdk/reference/content/parts-1#richtext).

<TypeTable type={{"value":{"description":"The sanitised rich text, or null to draw nothing.","type":"RichTextValue | null","required":true},"className":{"description":"Classes added to the wrapper.","type":"string","required":false}}} />

## `ArticleCardProps` [#articlecardprops]

Props of [`ArticleCard`](/themes/sdk/reference/content/parts-1#articlecard).

<TypeTable type={{"article":{"description":"The post to show.","type":"ArticleSummary","required":true},"readLabel":{"description":"The call to read the post, such as `Read article`.","type":"string","required":true},"variant":{"description":"A featured card gets the larger title and image.","type":"'default' | 'featured'","required":false},"showDate":{"description":"Whether the publication date shows; defaults to true.","type":"boolean","required":false},"showExcerpt":{"description":"Whether the excerpt shows; defaults to true.","type":"boolean","required":false}}} />

## `FaqAccordionProps` [#faqaccordionprops]

Props of [`FaqAccordion`](/themes/sdk/reference/content/parts-1#faqaccordion).

<TypeTable type={{"items":{"description":"The questions, in order.","type":"readonly FaqItem[]","required":true}}} />

## `BannerTemplate` [#bannertemplate]

Which ready-made design a banner started from.

```ts
type BannerTemplate = 'announcement' | 'ageGate' | 'newsletter' | 'discount' | 'slideInPromo' | 'maintenance' | 'comingSoon' | 'blank'
```

## `BannerLayout` [#bannerlayout]

How a banner shows: a bar, a dialog, a panel sliding in, or the whole screen.

```ts
type BannerLayout = 'bar' | 'modal' | 'slideIn' | 'fullscreen'
```

## `BannerPosition` [#bannerposition]

Where on the screen a banner sits.

```ts
type BannerPosition = 'top' | 'bottom' | 'center' | 'bottomLeft' | 'bottomRight'
```

## `BannerAction` [#banneraction]

What a banner button does when pressed.

```ts
type BannerAction = 'link' | 'dismiss' | 'accept' | 'decline'
```

## `BannerButton` [#bannerbutton]

A button of a banner.

<TypeTable type={{"label":{"description":"The button label.","type":"string","required":true},"action":{"description":"What the button does.","type":"BannerAction","required":true},"href":{"description":"Where a `link` button goes; empty for the other actions.","type":"string","required":true}}} />

## `BannerColors` [#bannercolors]

The colours a banner draws with, each a CSS colour or empty for the theme's own.

<TypeTable type={{"background":{"description":"The background.","type":"string","required":true},"text":{"description":"The text.","type":"string","required":true},"accent":{"description":"The buttons and highlights.","type":"string","required":true},"accentText":{"description":"Text on the accent colour.","type":"string","required":true}}} />

## `Banner` [#banner]

A banner the merchant set up, such as an announcement or a discount offer, in the page language.

<TypeTable type={{"id":{"description":"The banner's id.","type":"string","required":true},"name":{"description":"The merchant's name for it, never shown to shoppers.","type":"string","required":true},"template":{"description":"The design it started from.","type":"BannerTemplate","required":true},"layout":{"description":"How it shows.","type":"BannerLayout","required":true},"position":{"description":"Where it sits.","type":"BannerPosition","required":true},"eyebrow":{"description":"The small line above the heading.","type":"string","required":true},"heading":{"description":"The heading.","type":"string","required":true},"body":{"description":"The body text.","type":"string","required":true},"note":{"description":"The small print under the body.","type":"string","required":true},"image":{"description":"The picture, or null.","type":"MediaImageRef | null","required":true},"primary":{"description":"The main button, or null.","type":"BannerButton | null","required":true},"secondary":{"description":"The second button, or null.","type":"BannerButton | null","required":true},"code":{"description":"The discount code it shows, or null.","type":"string | null","required":true},"countdownTo":{"description":"When its countdown ends, as an ISO 8601 string, or null without a countdown.","type":"string | null","required":true},"colors":{"description":"The colours it draws with.","type":"BannerColors","required":true}}} />

## `CountdownTime` [#countdowntime]

Time left until a moment, ticking every second.

<TypeTable type={{"days":{"description":"Whole days left.","type":"number","required":true},"hours":{"description":"Hours left after the days.","type":"number","required":true},"minutes":{"description":"Minutes left after the hours.","type":"number","required":true},"seconds":{"description":"Seconds left after the minutes.","type":"number","required":true},"expired":{"description":"Whether the moment has passed.","type":"boolean","required":true},"valid":{"description":"Whether the moment could be read; false for an empty or broken value.","type":"boolean","required":true}}} />

## `CountdownProps` [#countdownprops]

Props of [`Countdown`](/themes/sdk/reference/content/parts-1#countdown).

<TypeTable type={{"hours":{"description":"Hours left.","type":"number","required":true},"minutes":{"description":"Minutes left after the hours.","type":"number","required":true},"seconds":{"description":"Seconds left after the minutes.","type":"number","required":true},"className":{"description":"Classes added to the wrapper.","type":"string","required":false}}} />

## `ContentBadgeProps` [#contentbadgeprops]

Props of [`ContentBadge`](/themes/sdk/reference/content/parts-1#contentbadge).

<TypeTable type={{"icon":{"description":"An icon before the label.","type":"ReactNode","required":false},"label":{"description":"The label.","type":"string","required":false},"variant":{"description":"`overlay` sits on pictures, `muted` on the page; `overlay` when omitted.","type":"'overlay' | 'muted'","required":false},"className":{"description":"Classes added to the badge.","type":"string","required":false}}} />
