# Structured text `StructuredText />` is a Svelte component that you can use to render the value contained inside a DatoCMS [Structured Text field type](https://www.datocms.com/docs/structured-text/dast). ### Table of contents - [Setup](#setup) - [Basic usage](#basic-usage) - [Customization](#customization) - [Custom components for blocks](#custom-components-for-blocks) - [Override default rendering of nodes](#override-default-rendering-of-nodes) - [Props](#props) ### Setup Import the component like this: ```js import { StructuredText } from '@datocms/svelte'; ``` ## Basic usage ```svelte
{#if data}

{{ data.blogPost.title }}

{/if}
``` ## Customization The `` component comes with a set of default components that are use to render all the nodes present in [DatoCMS Dast trees](https://www.datocms.com/docs/structured-text/dast). These default components are enough to cover most of the simple cases. You need to use custom components in the following cases: - you have to render blocks, inline items or item links: there's no conventional way of rendering theses nodes, so you must create and pass custom components; - you need to render a conventional node differently (e.g. you may want a custom render for blockquotes) ### Custom components for blocks Here is an example using custom components for blocks, inline blocks, inline records and links to records. Take a look at the [test fixtures](https://github.com/datocms/datocms-svelte/tree/main/src/lib/components/StructuredText/__tests__/__fixtures__) to see examples on how to implement these components. ```svelte
{#if data}

{{ data.blogPost.title }}

{/if}
``` ### Override default rendering of nodes `` automatically renders all nodes (except for `inlineItem`, `itemLink`, `block` and `inlineBlock`) using a set of default components, that you might want to customize. For example: - For `heading` nodes, you might want to add an anchor; - For `code` nodes, you might want to use a custom syntax highlighting component; In this case, you can easily override default rendering rules with the `components` props. See test fixtures for example implementations of custom components (e.g. [this special heading component](https://github.com/datocms/datocms-svelte/blob/main/src/lib/components/StructuredText/__tests__/__fixtures__/IncreasedLevelHeading.svelte)). ```svelte ``` ## Props | prop | type | required | description | default | | ---------- | ----------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------ | ------- | | data | `StructuredText \| DastNode` | :white_check_mark: | The actual [field value](https://www.datocms.com/docs/structured-text/dast) you get from DatoCMS | | | components | [`PredicateComponentTuple[] \| null`](https://github.com/datocms/datocms-svelte/blob/main/src/lib/index.ts) | Only required if data contains `block`, `inlineBlock`, `inlineItem` or `itemLink` nodes | Array of tuples formed by a predicate function and custom component | `[]` |