Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
d3574e8
docs(administration): add entrypoint for sfc documentation
davidtraum Sep 8, 2026
e257c35
docs(administration): add a hands-on tutorial for SFC extensions
gweiermann Sep 10, 2026
2a13bca
docs(administration): lead every before/after tab with its template
gweiermann Sep 11, 2026
fbbd0a0
docs(administration): retake the tutorial screenshots on a clean shop
gweiermann Sep 11, 2026
e9c45ef
docs(administration): add the SFC API reference
gweiermann Sep 11, 2026
713c6f7
docs(administration): import the composables in the API reference
gweiermann Sep 11, 2026
07b46a6
docs(administration): nest the tutorial chapters under a parent page
gweiermann Sep 11, 2026
87fcd36
Merge the tutorial branch, and split the reference into one page per API
gweiermann Sep 11, 2026
acfe394
docs(administration): group the reference into macros, composables an…
gweiermann Sep 11, 2026
5dac8de
docs: do not show imports for the override composables
gweiermann Sep 11, 2026
c911de5
Merge the tutorial branch
gweiermann Sep 11, 2026
42d1885
docs(administration): the override composables are not imported either
gweiermann Sep 11, 2026
8fa33ef
docs(administration): document every Administration composable
gweiermann Sep 11, 2026
9b10458
docs(administration): document useCmsElementDeprecated and how to mov…
gweiermann Sep 11, 2026
ddf13e9
docs(administration): one page per composable
gweiermann Sep 11, 2026
9edefee
docs(administration): drop the Vue composables section from the index
gweiermann Sep 11, 2026
521d32d
docs(administration): add the SFC roadmap page
gweiermann Sep 11, 2026
33bd648
docs(administration): explain the SFC internals
gweiermann Sep 14, 2026
dbceeaf
docs(administration): add timeline to index page
davidtraum Sep 15, 2026
7136325
docs(administration): improve index page
davidtraum Sep 15, 2026
4429c8a
docs(administration): add link hint
davidtraum Sep 15, 2026
b814ce8
docs(administration): fix markdown
davidtraum Sep 15, 2026
db28bf7
Merge branch 'main' into docs/admin-vue-sfc-extensions
davidtraum Sep 15, 2026
e8591ae
docs(administration): fix table alignment
davidtraum Sep 15, 2026
074b2db
docs(administration): fix table alignments
davidtraum Sep 15, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
42 changes: 42 additions & 0 deletions .wordlist.txt
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,7 @@
Cognito
CommercialB
CommercialBundle
CommonJS
ComponentFactory
Composables
ConfigJson
Expand Down Expand Up @@ -1345,12 +1346,14 @@
codebase
codeblock
codeblocks
codemod
codemods
codereview
colorpicker
compatability
componentSectionRenderer
composable
composables
config
configComponent
configs
Expand Down Expand Up @@ -1442,6 +1445,7 @@
dereferenced
describeFeatures
destructure
destructured
destructuring
dev
devenv
Expand Down Expand Up @@ -1513,6 +1517,7 @@
failover
fallback
fallbacks
fallthrough

Check warning on line 1520 in .wordlist.txt

View workflow job for this annotation

GitHub Actions / LanguageTool

[LanguageTool] .wordlist.txt#L1520

The adverb “fastly” is considered archaic. Consider an alternative. (FASTLY[1]) Suggestions: `quickly`, `fast`, `swiftly` Rule: https://community.languagetool.org/rule/show/FASTLY?lang=en-US&subId=1 Category: STYLE
Raw output
.wordlist.txt:1520:12: The adverb “fastly” is considered archaic. Consider an alternative. (FASTLY[1])
 Suggestions: `quickly`, `fast`, `swiftly`
 Rule: https://community.languagetool.org/rule/show/FASTLY?lang=en-US&subId=1
 Category: STYLE
fastly
favicon
fetchable
Expand Down Expand Up @@ -1636,10 +1641,12 @@
initialisms
initializer
initializers
inlines
installable
instantiation
integrations
interceptable
interop
intl
invalidations
io
Expand Down Expand Up @@ -1813,6 +1820,7 @@
otlp
overridable
overrideComponentSetup
overrideable
oversales
paas
packagist
Expand Down Expand Up @@ -2032,6 +2040,7 @@
snackbars
snakeCase
sortings
sourcemap
sourcemaps
sql
src
Expand Down Expand Up @@ -2076,6 +2085,8 @@
supervisord
svg
sw
swDefineOverride
swDefinePublic
swSelect
sw_extends
swoole
Expand Down Expand Up @@ -2147,8 +2158,11 @@
uninstallation
uniqBy
unminified
unmount
unmounting
unprefixed
unregister
unregisters
unrequested
unsecure
unserialize
Expand All @@ -2163,7 +2177,35 @@
uri
url
urls
useBlockContext
useCmsElement
useCmsElementDeprecated
useCmsState
useContext
useInlineSnippet
useListing
useMediaGridListener
useMediaSidebarModal
useModuleIconColors
useNotification
useNotificationTranslation
usePlaceholder
usePosition
useRuleBetweenOperator
useRuleContainer
useSalutation
useSession
useSnackbar
useSwContext
useSwPreviousState
useSwProps
useSystem
useTheme
useTranslateWithFallback
useUserSettings
useValidation
useValidityRange
useVideoCover
userAware
userRecovery
userland
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/administration-sfc-tutorial-component.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/administration-sfc-tutorial-extended.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/administration-sfc-tutorial-margin.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
---
nav:
title: Block components
position: 30

---

# Block components

<!--@include: ../../../../../../../snippets/guide/administration_sfc_experimental.md-->

Two globally registered components carry the native block system. You write the tags without importing anything.

<PageRef page="sw-block" title="sw-block" sub="Declare an extension point, or contribute to one" />
<PageRef page="sw-block-parent" title="sw-block-parent" sub="Render what the extension point held before you" />

## The model

A component **declares** an extension point by wrapping markup in `<sw-block name="…">`. Its children are the default content, and with nothing registered against the name it renders as though the wrapper were not there.

An override **contributes** to that point with `<sw-block extends="…">`. That tag renders nothing where it stands: it registers its content, and the matching `<sw-block name>` renders it wherever that happens to be.

Check warning on line 21 in guides/plugins/plugins/administration/single-file-components/api-reference/block-components/index.md

View workflow job for this annotation

GitHub Actions / LanguageTool

[LanguageTool] guides/plugins/plugins/administration/single-file-components/api-reference/block-components/index.md#L21

File types are normally capitalized. (FILE_EXTENSIONS_CASE[1]) Suggestions: `HTML` URL: https://languagetool.org/insights/post/spelling-capital-letters/ Rule: https://community.languagetool.org/rule/show/FILE_EXTENSIONS_CASE?lang=en-US&subId=1 Category: CASING
Raw output
guides/plugins/plugins/administration/single-file-components/api-reference/block-components/index.md:21:218: File types are normally capitalized. (FILE_EXTENSIONS_CASE[1])
 Suggestions: `HTML`
 URL: https://languagetool.org/insights/post/spelling-capital-letters/ 
 Rule: https://community.languagetool.org/rule/show/FILE_EXTENSIONS_CASE?lang=en-US&subId=1
 Category: CASING

```html
<!-- swag-greeting-card.vue -->
<sw-block name="swag_greeting_card_body">
<p>Default content</p>
</sw-block>

<!-- swag-greeting-card.override.vue -->
<sw-block extends="swag_greeting_card_body">
<sw-block-parent />
<p>Mine, underneath</p>
</sw-block>
```

## Names

A block name is a plain string and nothing validates it, so a typo matches nothing and fails silently. Names must be unique per component.

The convention is an owner prefix, then the path through the component, in `snake_case`:

```text
sw_product_detail_base_price_form
swag_greeting_card_body
```

Core uses `sw_`; a plugin uses its own prefix. A block you find in core is covered by the backwards-compatibility promise, so you can rely on it until the next major version.

## Chains

Several overrides may target one block. They stack in registration order, and each one's `<sw-block-parent />` renders the previous one's output rather than the original default. Leaving `<sw-block-parent />` out replaces everything below it, which is how one plugin removes another plugin's contribution.
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
---
nav:
title: sw-block-parent
position: 70

---

# `sw-block-parent`

<!--@include: ../../../../../../../snippets/guide/administration_sfc_experimental.md-->

```html

Check warning on line 12 in guides/plugins/plugins/administration/single-file-components/api-reference/block-components/sw-block-parent.md

View workflow job for this annotation

GitHub Actions / LanguageTool

[LanguageTool] guides/plugins/plugins/administration/single-file-components/api-reference/block-components/sw-block-parent.md#L12

File types are normally capitalized. (FILE_EXTENSIONS_CASE[1]) Suggestions: `HTML` URL: https://languagetool.org/insights/post/spelling-capital-letters/ Rule: https://community.languagetool.org/rule/show/FILE_EXTENSIONS_CASE?lang=en-US&subId=1 Category: CASING
Raw output
guides/plugins/plugins/administration/single-file-components/api-reference/block-components/sw-block-parent.md:12:3: File types are normally capitalized. (FILE_EXTENSIONS_CASE[1])
 Suggestions: `HTML`
 URL: https://languagetool.org/insights/post/spelling-capital-letters/ 
 Rule: https://community.languagetool.org/rule/show/FILE_EXTENSIONS_CASE?lang=en-US&subId=1
 Category: CASING
<sw-block-parent />
```

Takes no props. Renders whatever the extension point held before this override: the default content, or the previous override in the chain. Globally registered, so you write the tag without importing anything.

Leave it out and the original markup is replaced.

## Position decides yours

```html

Check warning on line 22 in guides/plugins/plugins/administration/single-file-components/api-reference/block-components/sw-block-parent.md

View workflow job for this annotation

GitHub Actions / LanguageTool

[LanguageTool] guides/plugins/plugins/administration/single-file-components/api-reference/block-components/sw-block-parent.md#L22

File types are normally capitalized. (FILE_EXTENSIONS_CASE[1]) Suggestions: `HTML` URL: https://languagetool.org/insights/post/spelling-capital-letters/ Rule: https://community.languagetool.org/rule/show/FILE_EXTENSIONS_CASE?lang=en-US&subId=1 Category: CASING
Raw output
guides/plugins/plugins/administration/single-file-components/api-reference/block-components/sw-block-parent.md:22:3: File types are normally capitalized. (FILE_EXTENSIONS_CASE[1])
 Suggestions: `HTML`
 URL: https://languagetool.org/insights/post/spelling-capital-letters/ 
 Rule: https://community.languagetool.org/rule/show/FILE_EXTENSIONS_CASE?lang=en-US&subId=1
 Category: CASING
<!-- append -->
<sw-block extends="swag_greeting_card_body">
<sw-block-parent />
<p>I go after</p>
</sw-block>

<!-- prepend -->
<sw-block extends="swag_greeting_card_body">
<p>I go before</p>
<sw-block-parent />
</sw-block>

<!-- replace -->
<sw-block extends="swag_greeting_card_body">
<p>The original content is gone</p>
</sw-block>
```

## Render it once, unconditionally

It claims its position in the chain when it is created, so a `v-if` on it, or a `v-for` around it, corrupts that chain. One `<sw-block-parent />` per extending block, always rendered.

## Chains

When several overrides target one block they stack, and each one's `<sw-block-parent />` renders the previous one's output rather than the original default. That is what keeps other plugins on the page when your own change is additive.
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
---
nav:
title: sw-block
position: 60

---

# `sw-block`

<!--@include: ../../../../../../../snippets/guide/administration_sfc_experimental.md-->

The extension point. Globally registered, so you write the tag without importing anything. Which prop you pass decides what it does.

| Prop | Type | Meaning |
| --------- | -------- | ------------------------------------------------------------------------------------ |
| `name` | `string` | **Declares** an extension point. Its children are the default content |
| `extends` | `string` | **Contributes** to the extension point of that name. Renders nothing where it stands |

`name` and `extends` are the only props you write. The component has others - your editor may offer them - and they are internal: the build rejects an authored `data`, `v-bind` or `#default` on an `sw-block`.

## Declaring an extension point

```html

Check warning on line 23 in guides/plugins/plugins/administration/single-file-components/api-reference/block-components/sw-block.md

View workflow job for this annotation

GitHub Actions / LanguageTool

[LanguageTool] guides/plugins/plugins/administration/single-file-components/api-reference/block-components/sw-block.md#L23

File types are normally capitalized. (FILE_EXTENSIONS_CASE[1]) Suggestions: `HTML` URL: https://languagetool.org/insights/post/spelling-capital-letters/ Rule: https://community.languagetool.org/rule/show/FILE_EXTENSIONS_CASE?lang=en-US&subId=1 Category: CASING
Raw output
guides/plugins/plugins/administration/single-file-components/api-reference/block-components/sw-block.md:23:3: File types are normally capitalized. (FILE_EXTENSIONS_CASE[1])
 Suggestions: `HTML`
 URL: https://languagetool.org/insights/post/spelling-capital-letters/ 
 Rule: https://community.languagetool.org/rule/show/FILE_EXTENSIONS_CASE?lang=en-US&subId=1
 Category: CASING
<sw-block name="swag_greeting_card_body">
<p>Default content</p>
</sw-block>
```

With nothing registered against the name, this renders as though the wrapper were not there.

## Contributing to one

```html

Check warning on line 33 in guides/plugins/plugins/administration/single-file-components/api-reference/block-components/sw-block.md

View workflow job for this annotation

GitHub Actions / LanguageTool

[LanguageTool] guides/plugins/plugins/administration/single-file-components/api-reference/block-components/sw-block.md#L33

File types are normally capitalized. (FILE_EXTENSIONS_CASE[1]) Suggestions: `HTML` URL: https://languagetool.org/insights/post/spelling-capital-letters/ Rule: https://community.languagetool.org/rule/show/FILE_EXTENSIONS_CASE?lang=en-US&subId=1 Category: CASING
Raw output
guides/plugins/plugins/administration/single-file-components/api-reference/block-components/sw-block.md:33:3: File types are normally capitalized. (FILE_EXTENSIONS_CASE[1])
 Suggestions: `HTML`
 URL: https://languagetool.org/insights/post/spelling-capital-letters/ 
 Rule: https://community.languagetool.org/rule/show/FILE_EXTENSIONS_CASE?lang=en-US&subId=1
 Category: CASING
<sw-block extends="swag_greeting_card_body">
<sw-block-parent />
<p>Mine, underneath</p>
</sw-block>
```

The target block is replaced by what goes inside. To keep what was there, render [`sw-block-parent`](sw-block-parent).

An `<sw-block extends>` belongs at the root of an override's template and cannot be nested inside another element. Where it sits does not affect where its content renders: it registers the content, and the matching `<sw-block name>` renders it.

## Names

Block names are strings and nothing validates them, so a typo silently matches nothing. They must be unique per component. The convention is an owner prefix and then the path through the component, in `snake_case`: core uses `sw_`, a plugin uses its own.

```text
sw_product_detail_base_price_form
swag_greeting_card_body
```

## Bindings in block content

Your override's bindings are available inside its `<sw-block extends>` content and read like any other Vue template binding. Mutating one from the template - `@click="counter++"` - is not supported; wrap the mutation in a function and call that instead.

## Order, when several extensions meet

Native `<sw-block extends>` contributions render in registration order, and all of them render after a TwigJS override of the same block. A legacy override is therefore always the parent of a native one, whichever order the plugins load in.

<PageRef page="../../internals" title="Internals" sub="How the chain is assembled, and why the order is what it is" />

Check warning on line 61 in guides/plugins/plugins/administration/single-file-components/api-reference/block-components/sw-block.md

View workflow job for this annotation

GitHub Actions / LanguageTool

[LanguageTool] guides/plugins/plugins/administration/single-file-components/api-reference/block-components/sw-block.md#L61

Unpaired symbol: ‘"’ seems to be missing (EN_UNPAIRED_QUOTES) URL: https://languagetool.org/insights/post/punctuation-guide/#what-are-parentheses Rule: https://community.languagetool.org/rule/show/EN_UNPAIRED_QUOTES?lang=en-US Category: PUNCTUATION
Raw output
guides/plugins/plugins/administration/single-file-components/api-reference/block-components/sw-block.md:61:14: Unpaired symbol: ‘"’ seems to be missing (EN_UNPAIRED_QUOTES)
 URL: https://languagetool.org/insights/post/punctuation-guide/#what-are-parentheses 
 Rule: https://community.languagetool.org/rule/show/EN_UNPAIRED_QUOTES?lang=en-US
 Category: PUNCTUATION

Check warning on line 61 in guides/plugins/plugins/administration/single-file-components/api-reference/block-components/sw-block.md

View workflow job for this annotation

GitHub Actions / LanguageTool

[LanguageTool] guides/plugins/plugins/administration/single-file-components/api-reference/block-components/sw-block.md#L61

Unpaired symbol: ‘"’ seems to be missing (EN_UNPAIRED_QUOTES) URL: https://languagetool.org/insights/post/punctuation-guide/#what-are-parentheses Rule: https://community.languagetool.org/rule/show/EN_UNPAIRED_QUOTES?lang=en-US Category: PUNCTUATION
Raw output
guides/plugins/plugins/administration/single-file-components/api-reference/block-components/sw-block.md:61:30: Unpaired symbol: ‘"’ seems to be missing (EN_UNPAIRED_QUOTES)
 URL: https://languagetool.org/insights/post/punctuation-guide/#what-are-parentheses 
 Rule: https://community.languagetool.org/rule/show/EN_UNPAIRED_QUOTES?lang=en-US
 Category: PUNCTUATION
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
---
nav:
title: Composables
position: 20

---

# Composables

<!--@include: ../../../../../../../snippets/guide/administration_sfc_experimental.md-->

All composables the Administration offers are experimental. Their names, options and return values can
still change without a deprecation, so pin down what you rely on and tell us when one of them does not
fit what you are building.

## Override composables

Three of them are injected by the build like the macros are, so you never import them, and they exist
only inside an `.override.vue` file. They are how an override reaches the component it overrides.

<PageRef page="use-sw-previous-state" title="useSwPreviousState()" sub="The state of the component you override" />
<PageRef page="use-sw-props" title="useSwProps()" sub="That component's props, read only" />
<PageRef page="use-sw-context" title="useSwContext()" sub="That component's emit, attrs, slots and expose" />

Check warning on line 23 in guides/plugins/plugins/administration/single-file-components/api-reference/composables/index.md

View workflow job for this annotation

GitHub Actions / LanguageTool

[LanguageTool] guides/plugins/plugins/administration/single-file-components/api-reference/composables/index.md#L23

An apostrophe ‘s’ denotes possession. Did you mean to use the plural form of the noun (no apostrophe)? (NOUN_APOSTROPHE_S_VERB[1]) Suggestions: `components` Rule: https://community.languagetool.org/rule/show/NOUN_APOSTROPHE_S_VERB?lang=en-US&subId=1 Category: GRAMMAR
Raw output
guides/plugins/plugins/administration/single-file-components/api-reference/composables/index.md:23:64: An apostrophe ‘s’ denotes possession. Did you mean to use the plural form of the noun (no apostrophe)? (NOUN_APOSTROPHE_S_VERB[1])
 Suggestions: `components`
 Rule: https://community.languagetool.org/rule/show/NOUN_APOSTROPHE_S_VERB?lang=en-US&subId=1
 Category: GRAMMAR

A base component needs none of them: it declares its own props with `defineProps()` and its own events
with `defineEmits()`.

## Administration composables

Everything else is imported, one module per composable, named after it in `kebab-case`:

```ts
import { useNotification } from 'shopware:composables/use-notification';
```

Most of them are the Composition API side of a mixin. A mixin declared its own props and read them off
`this`; a composable has neither, so whatever the mixin used to take from its host is passed in, and

Check warning on line 37 in guides/plugins/plugins/administration/single-file-components/api-reference/composables/index.md

View workflow job for this annotation

GitHub Actions / LanguageTool

[LanguageTool] guides/plugins/plugins/administration/single-file-components/api-reference/composables/index.md#L37

A noun may be missing here. (DT_JJ_NO_NOUN[2]) Rule: https://community.languagetool.org/rule/show/DT_JJ_NO_NOUN?lang=en-US&subId=2 Category: GRAMMAR
Raw output
guides/plugins/plugins/administration/single-file-components/api-reference/composables/index.md:37:8: A noun may be missing here. (DT_JJ_NO_NOUN[2])
 Rule: https://community.languagetool.org/rule/show/DT_JJ_NO_NOUN?lang=en-US&subId=2
 Category: GRAMMAR
getters keep it reactive:

```ts
const { isBetween, betweenValue } = useRuleBetweenOperator({
condition: () => props.condition,

Check warning on line 42 in guides/plugins/plugins/administration/single-file-components/api-reference/composables/index.md

View workflow job for this annotation

GitHub Actions / LanguageTool

[LanguageTool] guides/plugins/plugins/administration/single-file-components/api-reference/composables/index.md#L42

If a new sentence starts here, add a space and start with an uppercase letter. (LC_AFTER_PERIOD[1]) Suggestions: ` Condition`, ` condition` Rule: https://community.languagetool.org/rule/show/LC_AFTER_PERIOD?lang=en-US&subId=1 Category: CASING
Raw output
guides/plugins/plugins/administration/single-file-components/api-reference/composables/index.md:42:27: If a new sentence starts here, add a space and start with an uppercase letter. (LC_AFTER_PERIOD[1])
 Suggestions: ` Condition`, ` condition`
 Rule: https://community.languagetool.org/rule/show/LC_AFTER_PERIOD?lang=en-US&subId=1
 Category: CASING
ensureValueExist: () => emit('ensure-value-exist'),
});
```

The mixins stay where they are, so an Options API component that has not been migrated keeps working.

<PageRef page="../../../mixins-directives/using-mixins" title="Using mixins" sub="The Options API side, and what each mixin does" />

Check warning on line 49 in guides/plugins/plugins/administration/single-file-components/api-reference/composables/index.md

View workflow job for this annotation

GitHub Actions / LanguageTool

[LanguageTool] guides/plugins/plugins/administration/single-file-components/api-reference/composables/index.md#L49

Unpaired symbol: ‘"’ seems to be missing (EN_UNPAIRED_QUOTES) URL: https://languagetool.org/insights/post/punctuation-guide/#what-are-parentheses Rule: https://community.languagetool.org/rule/show/EN_UNPAIRED_QUOTES?lang=en-US Category: PUNCTUATION
Raw output
guides/plugins/plugins/administration/single-file-components/api-reference/composables/index.md:49:14: Unpaired symbol: ‘"’ seems to be missing (EN_UNPAIRED_QUOTES)
 URL: https://languagetool.org/insights/post/punctuation-guide/#what-are-parentheses 
 Rule: https://community.languagetool.org/rule/show/EN_UNPAIRED_QUOTES?lang=en-US
 Category: PUNCTUATION

Check warning on line 49 in guides/plugins/plugins/administration/single-file-components/api-reference/composables/index.md

View workflow job for this annotation

GitHub Actions / LanguageTool

[LanguageTool] guides/plugins/plugins/administration/single-file-components/api-reference/composables/index.md#L49

Unpaired symbol: ‘"’ seems to be missing (EN_UNPAIRED_QUOTES) URL: https://languagetool.org/insights/post/punctuation-guide/#what-are-parentheses Rule: https://community.languagetool.org/rule/show/EN_UNPAIRED_QUOTES?lang=en-US Category: PUNCTUATION
Raw output
guides/plugins/plugins/administration/single-file-components/api-reference/composables/index.md:49:54: Unpaired symbol: ‘"’ seems to be missing (EN_UNPAIRED_QUOTES)
 URL: https://languagetool.org/insights/post/punctuation-guide/#what-are-parentheses 
 Rule: https://community.languagetool.org/rule/show/EN_UNPAIRED_QUOTES?lang=en-US
 Category: PUNCTUATION

### Notifications

<PageRef page="use-notification" title="useNotification()" sub="The notifications in the top right, and the system ones" />
<PageRef page="use-notification-translation" title="useNotificationTranslation()" sub="Translate and sanitize a notification for rendering" />
<PageRef page="use-snackbar" title="useSnackbar()" sub="Add and remove snackbars" />

### Session and context

<PageRef page="use-session" title="useSession()" sub="The logged-in user, their privileges and the admin locale" />
<PageRef page="use-system" title="useSystem()" sub="The locales the Administration has registered" />
<PageRef page="use-context" title="useContext()" sub="The app and API context behind Shopware.Context" />

Check warning on line 61 in guides/plugins/plugins/administration/single-file-components/api-reference/composables/index.md

View workflow job for this annotation

GitHub Actions / LanguageTool

[LanguageTool] guides/plugins/plugins/administration/single-file-components/api-reference/composables/index.md#L61

Add a space between sentences. (SENTENCE_WHITESPACE) Suggestions: ` Context` Rule: https://community.languagetool.org/rule/show/SENTENCE_WHITESPACE?lang=en-US Category: TYPOGRAPHY
Raw output
guides/plugins/plugins/administration/single-file-components/api-reference/composables/index.md:61:94: Add a space between sentences. (SENTENCE_WHITESPACE)
 Suggestions: ` Context`
 Rule: https://community.languagetool.org/rule/show/SENTENCE_WHITESPACE?lang=en-US
 Category: TYPOGRAPHY
<PageRef page="use-user-settings" title="useUserSettings()" sub="Read and write per-user config" />
<PageRef page="use-theme" title="useTheme()" sub="The light or dark appearance, and the user's preference" />
<PageRef page="use-module-icon-colors" title="useModuleIconColors()" sub="The opt-in colored module icons" />

### Text and formatting

<PageRef page="use-inline-snippet" title="useInlineSnippet()" sub="Resolve a snippet a merchant translated themselves" />
<PageRef page="use-translate-with-fallback" title="useTranslateWithFallback()" sub="Translate against the active locale, then the fallback" />
<PageRef page="use-placeholder" title="usePlaceholder()" sub="Read a translatable field the way the Administration displays it" />
<PageRef page="use-salutation" title="useSalutation()" sub="Format a salutation, with its fallback" />

### Lists and forms

<PageRef page="use-listing" title="useListing()" sub="Pagination, sorting, search and selection, kept in the route" />
<PageRef page="use-position" title="usePosition()" sub="The position integers of an entity collection" />
<PageRef page="use-validation" title="useValidation()" sub="Run a value against the rules of the validation prop" />

### Rule builder

<PageRef page="use-rule-container" title="useRuleContainer()" sub="The state of a condition container in sw-condition-tree" />
<PageRef page="use-rule-between-operator" title="useRuleBetweenOperator()" sub="Render a between operator as a from/to pair" />

### Media

<PageRef page="use-media-grid-listener" title="useMediaGridListener()" sub="Turn media grid events into a selection" />
<PageRef page="use-media-sidebar-modal" title="useMediaSidebarModal()" sub="The media sidebar's modals, and what they report" />
<PageRef page="use-video-cover" title="useVideoCover()" sub="Assign and remove a video's poster image" />

### CMS

<PageRef page="use-cms-state" title="useCmsState()" sub="The CMS editor state a block or config panel works against" />
<PageRef page="use-cms-element" title="useCmsElement()" sub="An element's resolved config, and the writes that change it" />
<PageRef page="use-cms-element-deprecated" title="useCmsElementDeprecated()" sub="What the codemod targets, and how to move off it" />

### Block system

<PageRef page="use-block-context" title="useBlockContext()" sub="The registry behind sw-block" />
Loading
Loading