@vestra-player/sdk 1.5.40 → 1.5.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.5.42
4
+
5
+ **Who must change: nobody.** Documentation only: no API changes, `apiVersion` stays `vestra/1`, no player version needed. The package's code is the same as 1.5.41; the doc comments' `@see` links (27 in `src/plugin/types.ts`) now point at `docs/explanation/` instead of `docs/concepts/`. The site's page addresses stay the same, and the old _Concepts_ group address redirects to _Explanation_; `llms.txt` and `llms-full.txt` follow the new pages.
6
+
7
+ - **The documentation follows Diátaxis.** The site's groups are Tutorials, How-to, Reference, Explanation, Guidelines, Examples and Upgrading, each with one kind of page whose shape `npm run docs:check` enforces (a tutorial has `Before you start`, numbered steps and `Next`; a how-to guide a goal, steps, a complete example and `See also`; explanation pages give no steps). _Concepts_ became _Explanation_ (the old address redirects); the migration notes moved to _Upgrading_ (`docs/upgrading/`), with every release's "who must change" in one generated table. New pages: tutorials _Add a window_, _Add settings and translations_, _Test, check, pack and publish_; _Troubleshooting_; reference pages _Error codes_, _Translations_ and _Test host_ (generated tables); explanation pages _GPU and software rendering_, _The player's Rust core_ and _How the player runs and talks to plugins_. Diagrams are Mermaid, and a check refuses link syntax in their labels.
8
+ - **New tutorial _Write your own blur kernel_**: what the numbers of a 3×3 blur kernel do and why it is normalized; the kernel as an mpv user shader the plugin owns, applied with `plugin.video.shaders()`; the same kernel as a `convolution` node (the 9, 25 and 49 entry sizes, `row` and `column` kernels, `rdiv`, `bias` and `VIDEO_PROCESSING_LIMITS`) that also reaches processed snapshots; and `gblur` as the shortcut.
9
+ - **New how-to guide _Keep a command's state without keeping the plugin running_**: find what keeps a plugin running with `TestHost.keepsRunning`, replace functions that read `plugin.player.state` with `plugin.when` conditions, keep the plugin's own state as values, and test it.
10
+ - _Commands, menus and key bindings_ (explanation) explains `plugin.when`: why the player evaluates conditions, how they relate to idle stop, mirror and listening subscriptions, and `keepsRunning` / `listeningWhy`. _How a plugin runs_ says that listeners of `packages`, `bindings`, `appearance` and the resolvers' file types no longer keep a plugin running (player 0.5.21). _Video and audio processing_ describes the shader channel and the `convolution` and `lut3d` nodes.
11
+ - _The player's Rust core_ shows the current window renderer choice (player 0.5.20): Direct3D 12 windows in CPU mode on Windows and their fallback to software windows. No page says any longer that only macOS renders on the GPU.
12
+
13
+ ## 1.5.41
14
+
15
+ **Who must change: nobody.** No API changes, `apiVersion` stays `vestra/1`, no player version needed. Only how the player draws the bottom bar's strip of command buttons changes (player 0.5.22); a plugin's declarations and a bar that places `BarButtons` stay as they are.
16
+
17
+ - **`@vestra/bar-buttons.slint`** (the read-only copy of the player's widget library): every enabled button of the strip draws its icon in the accent colour (`Theme.accent`, `Theme.accent-press` while pressed; `Theme.icon-disabled` when disabled), plugin images (`plugin.ui.image`) included. Before, icons were in the text colour and only a checked toggle in the accent. A checked command (`checked: true`, the sidebar toggle while the sidebar is on) now shows a 4px dot in the icon's colour centred under the icon, as the macOS Dock marks a running app; the accessibility checked state is unchanged.
18
+ - _Commands_ (reference), `CommandOptions.button` and `TestHost.barButtons[].checked` describe the new look.
19
+
3
20
  ## 1.5.40
4
21
 
5
22
  **Who must change: nobody.** Additions only, `apiVersion` stays `vestra/1`. `plugin.when` needs player 0.5.21 (`"minPlayerVersion": "0.5.21"`); older players have no `plugin.when`. A plugin that does not use it sees no difference. What changes with the player's lazy activation (off by default; `VESTRA_LAZY=1`): a listener of `packages.changed`, `bindings.changed`, `appearance.changed` or `resolvers.fileTypes` no longer keeps a plugin running; the player stops it while idle and starts it again to deliver the event. `bindings.changed` (`plugin.bindings.onChange`) now fires only when the binding list changes, no longer when a plugin starts again with the same commands; nobody must change (the event carries no data, and the list is what it stands for).
@@ -203,7 +220,7 @@ Fixes for Windows and for a vendored SDK, and built-ins that can no longer be di
203
220
 
204
221
  ## 1.5.17
205
222
 
206
- **Package rollback is removed**, as announced in 1.5.16: the player keeps no previous plugin version. `apiVersion` stays `vestra/1` (a patch release, as when 1.5.8 removed `PackageCandidate.trial()`); plugins that do not manage other plugins need no change. A plugin manager that still calls `rollback` or reads `previousVersion` no longer compiles. Migration: [Migrating off package rollback](docs/how-to/rollback-migration.md).
223
+ **Package rollback is removed**, as announced in 1.5.16: the player keeps no previous plugin version. `apiVersion` stays `vestra/1` (a patch release, as when 1.5.8 removed `PackageCandidate.trial()`); plugins that do not manage other plugins need no change. A plugin manager that still calls `rollback` or reads `previousVersion` no longer compiles. Migration: [Migrating off package rollback](docs/upgrading/rollback-migration.md).
207
224
 
208
225
  - **Removed: `Packages.rollback`** and the wire method `packages.rollback`. The player already answers the method with `unsupported` ("unknown package method"). To go back to an older version of a third-party plugin, the user uninstalls it and installs that version's `.vxp`.
209
226
  - **Removed: `PluginInfo.previousVersion`** and the wire field `PackageInfo.previousVersion`; `packages.list` and `packages.changed` no longer carry it.
@@ -214,7 +231,7 @@ Fixes for Windows and for a vendored SDK, and built-ins that can no longer be di
214
231
 
215
232
  ## 1.5.16
216
233
 
217
- **Package rollback is deprecated: the player keeps no previous plugin version.** `apiVersion` stays `vestra/1`; code still compiles, and plugins that do not manage other plugins need no change. 1.5.17 removes the deprecated symbols, as 1.5.8 removed `PackageCandidate.trial()` at patch level. Migration: [Migrating off package rollback](docs/how-to/rollback-migration.md).
234
+ **Package rollback is deprecated: the player keeps no previous plugin version.** `apiVersion` stays `vestra/1`; code still compiles, and plugins that do not manage other plugins need no change. 1.5.17 removes the deprecated symbols, as 1.5.8 removed `PackageCandidate.trial()` at patch level. Migration: [Migrating off package rollback](docs/upgrading/rollback-migration.md).
218
235
 
219
236
  - **Deprecated: `Packages.rollback`** (removed in 1.5.17). The player no longer has `packages.rollback` and answers it with `unsupported` ("unknown package method"); the SDK still forwards the call, so the error reaches the caller. To go back to an older version of a third-party plugin, the user uninstalls it and installs that version's `.vxp`.
220
237
  - **Deprecated: `PluginInfo.previousVersion`** and the wire field `PackageInfo.previousVersion` (removed in 1.5.17): always `null`, since an upgrade replaces the package. The SDK reads a missing field as `null`.
@@ -292,7 +309,7 @@ Fixes for Windows and for a vendored SDK, and built-ins that can no longer be di
292
309
 
293
310
  ## 1.5.9
294
311
 
295
- **Translations** (player 0.4.3). Additive; `apiVersion` stays `vestra/1`, and plugins written for 1.5.8 need no change. One test-visible change: a core action's `declaration.path` in `TestHost` is now the player's English key (read `display` for what the menu shows). The player now shows its interface in English, Simplified Chinese, Japanese, Korean, German, French or Spanish, chosen at start-up; a plugin writes every text in English and ships one gettext file per language. Plugins write no translation code: the player translates. Guides: [Translate a plugin](docs/how-to/i18n.md), [Migrate a plugin to English source text](docs/how-to/i18n-migration.md); example: `examples/i18n`.
312
+ **Translations** (player 0.4.3). Additive; `apiVersion` stays `vestra/1`, and plugins written for 1.5.8 need no change. One test-visible change: a core action's `declaration.path` in `TestHost` is now the player's English key (read `display` for what the menu shows). The player now shows its interface in English, Simplified Chinese, Japanese, Korean, German, French or Spanish, chosen at start-up; a plugin writes every text in English and ships one gettext file per language. Plugins write no translation code: the player translates. Guides: [Translate a plugin](docs/how-to/i18n.md), [Migrate a plugin to English source text](docs/upgrading/i18n-migration.md); example: `examples/i18n`.
296
313
 
297
314
  - **`plugin.i18n.locale`** (new `I18n`, `Locale`): the interface language of this run, `"en"`, `"zh-Hans"`, `"ja"`, `"ko"`, `"de"`, `"fr"` or `"es"`; it never changes while the player runs. `"en"` from older players.
298
315
  - **Templates with arguments**: `osd.show(text, args?)`, `OsdPanel.set(text, args?)` and `ConfirmOptions.args` (new `TemplateArgs`: an array for `{}` / `{0}`, an object for `{name}`). The player translates the template with the plugin's catalog, then fills it in. Without `args` the text shows as it is, so existing calls are unchanged; older players show the template unfilled.
package/README.md CHANGED
@@ -57,7 +57,7 @@ export default async function activate(plugin: Plugin) {
57
57
  }
58
58
  ```
59
59
 
60
- Run `npx vestra-plugin pack` to check and package it, or start the player with `--plugin <folder>` to try it right away. This is [`examples/hello`](https://github.com/vestrasys/vestra-player-sdk/tree/main/examples/hello); [Getting started](https://vestrasys.github.io/vestra-player-sdk/documents/Getting_started.html) adds a window, tests and packaging.
60
+ Run `npx vestra-plugin pack` to check and package it, or start the player with `--plugin <folder>` to try it right away. This is [`examples/hello`](https://github.com/vestrasys/vestra-player-sdk/tree/main/examples/hello); the [Tutorials](https://vestrasys.github.io/vestra-player-sdk/documents/Tutorials.html) build a plugin in four lessons: [Getting started](https://vestrasys.github.io/vestra-player-sdk/documents/Getting_started.html) (a menu item and an on-screen message), then a window, settings and translations, and tests, packing and publishing.
61
61
 
62
62
  ## Examples
63
63
 
@@ -79,12 +79,13 @@ Complete, tested plugins in [`examples/`](https://github.com/vestrasys/vestra-pl
79
79
 
80
80
  The [documentation site](https://vestrasys.github.io/vestra-player-sdk/) is the one place for everything a plugin author needs:
81
81
 
82
- - **[Tutorials](https://vestrasys.github.io/vestra-player-sdk/documents/Tutorials.html)**: [Getting started](https://vestrasys.github.io/vestra-player-sdk/documents/Getting_started.html), from an empty folder to a packed plugin.
83
- - **[Concepts](https://vestrasys.github.io/vestra-player-sdk/documents/Concepts.html)**: how a plugin runs, commands and key bindings, playback, video and audio processing, the interface.
84
- - **[How-to guides](https://vestrasys.github.io/vestra-player-sdk/documents/How-to_guides.html)**: testing, translating and publishing a plugin, responsive sliders, remembering window state.
85
- - **[Guidelines](https://vestrasys.github.io/vestra-player-sdk/documents/Guidelines.html)**: rules for the interface and the menus.
82
+ - **[Tutorials](https://vestrasys.github.io/vestra-player-sdk/documents/Tutorials.html)**: four lessons that build one plugin, starting with [Getting started](https://vestrasys.github.io/vestra-player-sdk/documents/Getting_started.html): a menu item, a window, settings and translations, tests and the store; then a lesson on writing your own blur kernel (a GPU shader and a convolution node).
83
+ - **[How-to guides](https://vestrasys.github.io/vestra-player-sdk/documents/How-to_guides.html)**: one task each (goal, steps, complete example): playback, storage, subtitles, sliders, window state, the GPU switch, menu state that needs no running plugin (`plugin.when`), translating, testing, publishing; and troubleshooting.
84
+ - **[Reference](https://vestrasys.github.io/vestra-player-sdk/documents/Reference.html)**: capabilities, manifest fields, limits, menus and bindings, platforms, theme, error codes, translations, the test host, and the [command line](https://vestrasys.github.io/vestra-player-sdk/documents/Command_line.html) (`vestra-plugin check`, `test`, `build`, `pack`, `i18n extract`, `i18n check`).
85
+ - **[Explanation](https://vestrasys.github.io/vestra-player-sdk/documents/Explanation.html)**: how a plugin runs, commands and key bindings, playback, video and audio processing, the interface, GPU and software rendering, the player's Rust core and how it runs and talks to plugins.
86
+ - **[Guidelines](https://vestrasys.github.io/vestra-player-sdk/documents/Guidelines.html)**: rules for every plugin, the interface and the menus.
86
87
  - **[Examples](https://vestrasys.github.io/vestra-player-sdk/documents/Examples.html)**: the walkthroughs above.
87
- - **[Reference](https://vestrasys.github.io/vestra-player-sdk/documents/Reference.html)**: capabilities, manifest fields, limits, menus and bindings, platforms, theme, and the [command line](https://vestrasys.github.io/vestra-player-sdk/documents/Command_line.html) (`vestra-plugin check`, `test`, `build`, `pack`, `i18n extract`, `i18n check`).
88
+ - **[Upgrading](https://vestrasys.github.io/vestra-player-sdk/documents/Upgrading.html)**: what to change when a release deprecates or removes something, with the migration checklists and every release's "who must change".
88
89
  - **[API](https://vestrasys.github.io/vestra-player-sdk/modules/_vestra-player_sdk.html)**: every type and member of `@vestra-player/sdk` and `@vestra-player/sdk/testing`.
89
90
 
90
91
  ## Compatibility
@@ -370,7 +370,7 @@ export interface FakeBarButton {
370
370
  readonly order: number;
371
371
  /** Clickable: the command is enabled and not busy. */
372
372
  readonly enabled: boolean;
373
- /** Drawn in the accent colour: the command is checked. */
373
+ /** Shown with the on dot under its icon: the command is checked. */
374
374
  readonly checked: boolean;
375
375
  /**
376
376
  * The tooltip without the key: the command's shown title (trailing "…"
@@ -520,7 +520,7 @@ export interface Scope extends Disposable {
520
520
  * `dataDirectory`.
521
521
  *
522
522
  * @capability That of each module (see the modules).
523
- * @see [How a plugin runs](../../docs/concepts/plugins.md)
523
+ * @see [How a plugin runs](../../docs/explanation/plugins.md)
524
524
  * @since 1.0.0
525
525
  * @category Plugin
526
526
  */
@@ -540,7 +540,7 @@ export interface Plugin extends Scope {
540
540
  * {@link PluginInfo.dataDirectory}). Write files atomically (to a
541
541
  * temporary name, then rename); for JSON settings prefer
542
542
  * {@link Scope.storage}. Throws `unavailable` when the player provided
543
- * none. See [How a plugin runs](../../docs/concepts/plugins.md#the-data-directory).
543
+ * none. See [How a plugin runs](../../docs/explanation/plugins.md#the-data-directory).
544
544
  */
545
545
  readonly dataDirectory: string;
546
546
  }
@@ -838,9 +838,9 @@ export type BarButtonIcon = "play" | "pause" | "stop" | "back" | "forward" | "op
838
838
  * "…" removed) and its first key as the tooltip ("Plugin Store (F9)"),
839
839
  * `enabled`, `busy` and `reason` as the menu item has them: a disabled or
840
840
  * busy command's button is drawn disabled, its tooltip adds the reason, and
841
- * a click runs nothing. A command with `checked` shows its icon in the
842
- * accent colour while checked. A click runs the command exactly like a
843
- * click on its menu item.
841
+ * a click runs nothing. Every button's icon is drawn in the accent colour;
842
+ * a command with `checked` shows a small dot under its icon while checked.
843
+ * A click runs the command exactly like a click on its menu item.
844
844
  *
845
845
  * **Limits.** One button per plugin and eight in the player
846
846
  * (`BAR_BUTTON_LIMITS`): a button past them is left out (its command and
@@ -918,7 +918,7 @@ export interface CommandButton {
918
918
  * order, group or binding. The same path registered twice, or a path that
919
919
  * is both an item and a submenu, fails with `conflict` (through `ready`).
920
920
  *
921
- * @see {@link Commands.add}, [Commands, menus and key bindings](../../docs/concepts/commands.md)
921
+ * @see {@link Commands.add}, [Commands, menus and key bindings](../../docs/explanation/commands.md)
922
922
  * @since 1.0.0
923
923
  * @category Commands
924
924
  */
@@ -1085,7 +1085,7 @@ export interface CommandOptions {
1085
1085
  * exportCommand.set({ enabled: () => plugin.player.state.phase === "ready" });
1086
1086
  * ```
1087
1087
  *
1088
- * @see {@link Commands.add}, [Commands, menus and key bindings](../../docs/concepts/commands.md)
1088
+ * @see {@link Commands.add}, [Commands, menus and key bindings](../../docs/explanation/commands.md)
1089
1089
  * @since 1.0.0
1090
1090
  * @category Commands
1091
1091
  */
@@ -1171,7 +1171,7 @@ export interface Command extends Disposable {
1171
1171
  * });
1172
1172
  * ```
1173
1173
  *
1174
- * @see {@link Command}, {@link CommandOptions}, [Commands, menus and key bindings](../../docs/concepts/commands.md)
1174
+ * @see {@link Command}, {@link CommandOptions}, [Commands, menus and key bindings](../../docs/explanation/commands.md)
1175
1175
  * @since 1.0.0
1176
1176
  * @category Commands
1177
1177
  */
@@ -1261,7 +1261,7 @@ export interface Commands {
1261
1261
  * }));
1262
1262
  * ```
1263
1263
  *
1264
- * @see {@link Ui.image}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/concepts/ui.md)
1264
+ * @see {@link Ui.image}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/explanation/ui.md)
1265
1265
  * @since 1.0.0
1266
1266
  * @category UI
1267
1267
  */
@@ -1471,7 +1471,7 @@ export type Props = Record<string, PropValue>;
1471
1471
  *
1472
1472
  * {@includeCode ../../examples/markdown/ui/document.slint}
1473
1473
  *
1474
- * @see {@link ImageRef}, {@link MarkdownRef}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/concepts/ui.md)
1474
+ * @see {@link ImageRef}, {@link MarkdownRef}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/explanation/ui.md)
1475
1475
  * @since 1.0.0
1476
1476
  * @category UI
1477
1477
  */
@@ -1736,7 +1736,7 @@ export interface Ui {
1736
1736
  *
1737
1737
  * {@includeCode ../../examples/bookmark/ui/bookmark.slint}
1738
1738
  *
1739
- * @see {@link Window}, {@link Panel}, {@link SettingsPage}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/concepts/ui.md), [Keep a slider responsive while dragging](../../docs/how-to/slider.md)
1739
+ * @see {@link Window}, {@link Panel}, {@link SettingsPage}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/explanation/ui.md), [Keep a slider responsive while dragging](../../docs/how-to/slider.md)
1740
1740
  * @since 1.0.0
1741
1741
  * @category UI
1742
1742
  */
@@ -1947,7 +1947,7 @@ export interface View {
1947
1947
  * });
1948
1948
  * ```
1949
1949
  *
1950
- * @see {@link Windows.create}, {@link View}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/concepts/ui.md), [Remember a window's state between runs](../../docs/how-to/window-state.md)
1950
+ * @see {@link Windows.create}, {@link View}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/explanation/ui.md), [Remember a window's state between runs](../../docs/how-to/window-state.md)
1951
1951
  * @since 1.0.0
1952
1952
  * @category UI
1953
1953
  */
@@ -2129,7 +2129,7 @@ export interface Window extends View, Disposable {
2129
2129
  *
2130
2130
  * {@includeCode ../../examples/bookmark/main.ts#window,command}
2131
2131
  *
2132
- * @see {@link Window}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/concepts/ui.md)
2132
+ * @see {@link Window}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/explanation/ui.md)
2133
2133
  * @since 1.0.0
2134
2134
  * @category UI
2135
2135
  */
@@ -2534,7 +2534,7 @@ export interface SidebarSlot extends PanelSlot {
2534
2534
  *
2535
2535
  * {@includeCode ../../examples/panel-menu/ui/panel.slint}
2536
2536
  *
2537
- * @see {@link Panels.mount}, {@link PanelSlot}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/concepts/ui.md)
2537
+ * @see {@link Panels.mount}, {@link PanelSlot}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/explanation/ui.md)
2538
2538
  * @since 1.0.0
2539
2539
  * @category UI
2540
2540
  */
@@ -2972,7 +2972,7 @@ export type ThemeId = "vestra" | "vestra-light";
2972
2972
  * });
2973
2973
  * ```
2974
2974
  *
2975
- * @see [Windows, panels, settings pages, dialogs and the OSD](../../docs/concepts/ui.md) (theme tokens)
2975
+ * @see [Windows, panels, settings pages, dialogs and the OSD](../../docs/explanation/ui.md) (theme tokens)
2976
2976
  * @since 1.0.0
2977
2977
  * @category UI
2978
2978
  */
@@ -3493,7 +3493,7 @@ export type SettingsCategory = "general" | "playback" | "subtitles" | "video" |
3493
3493
  * }
3494
3494
  * ```
3495
3495
  *
3496
- * @see {@link Settings.page}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/concepts/ui.md)
3496
+ * @see {@link Settings.page}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/explanation/ui.md)
3497
3497
  * @since 1.0.0
3498
3498
  * @category UI
3499
3499
  */
@@ -3554,7 +3554,7 @@ export type SettingsPage = View & Disposable & {
3554
3554
  * page.on("resumeToggled", (on: boolean) => store.save({ ...store.value, resume: on }));
3555
3555
  * ```
3556
3556
  *
3557
- * @see {@link SettingsPage}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/concepts/ui.md)
3557
+ * @see {@link SettingsPage}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/explanation/ui.md)
3558
3558
  * @since 1.0.0
3559
3559
  * @category UI
3560
3560
  */
@@ -3746,7 +3746,7 @@ export interface BackdropSlot {
3746
3746
  *
3747
3747
  * {@includeCode ../../examples/panel-menu/ui/panel.slint}
3748
3748
  *
3749
- * @see {@link Panel}, {@link PanelSlot}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/concepts/ui.md)
3749
+ * @see {@link Panel}, {@link PanelSlot}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/explanation/ui.md)
3750
3750
  * @since 1.0.0
3751
3751
  * @category UI
3752
3752
  */
@@ -4469,7 +4469,7 @@ export interface ConfirmOptions {
4469
4469
  * }
4470
4470
  * ```
4471
4471
  *
4472
- * @see [Windows, panels, settings pages, dialogs and the OSD](../../docs/concepts/ui.md)
4472
+ * @see [Windows, panels, settings pages, dialogs and the OSD](../../docs/explanation/ui.md)
4473
4473
  * @since 1.0.0
4474
4474
  * @category UI
4475
4475
  */
@@ -4683,7 +4683,7 @@ export interface AudioTrack {
4683
4683
  * Without `events`, {@link Player.state} only updates at start and after
4684
4684
  * this plugin's own operations.
4685
4685
  *
4686
- * @see {@link Player.state}, [Playback state, controls and sources](../../docs/concepts/playback.md)
4686
+ * @see {@link Player.state}, [Playback state, controls and sources](../../docs/explanation/playback.md)
4687
4687
  * @since 1.0.0
4688
4688
  * @category Playback
4689
4689
  */
@@ -4816,7 +4816,7 @@ export interface Chapter {
4816
4816
  * });
4817
4817
  * ```
4818
4818
  *
4819
- * @see [Playback state, controls and sources](../../docs/concepts/playback.md)
4819
+ * @see [Playback state, controls and sources](../../docs/explanation/playback.md)
4820
4820
  * @since 1.0.0
4821
4821
  * @category Playback
4822
4822
  */
@@ -5335,7 +5335,7 @@ export interface PlaybackStats {
5335
5335
  * `events` to follow changes made elsewhere; `producer.av` for
5336
5336
  * {@link Player.openStream}.
5337
5337
  *
5338
- * @see [Playback state, controls and sources](../../docs/concepts/playback.md), [Control playback](../../docs/how-to/control-playback.md)
5338
+ * @see [Playback state, controls and sources](../../docs/explanation/playback.md), [Control playback](../../docs/how-to/control-playback.md)
5339
5339
  * @since 1.0.0
5340
5340
  * @category Playback
5341
5341
  */
@@ -6298,7 +6298,7 @@ export interface OsdPanelOptions {
6298
6298
  * say("Blur on");
6299
6299
  * ```
6300
6300
  *
6301
- * @see {@link OsdPanel}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/concepts/ui.md)
6301
+ * @see {@link OsdPanel}, [Windows, panels, settings pages, dialogs and the OSD](../../docs/explanation/ui.md)
6302
6302
  * @since 1.0.0
6303
6303
  * @category UI
6304
6304
  */
@@ -6463,7 +6463,7 @@ interface Filter<T> extends Disposable {
6463
6463
  * never throws: a refused chain shows as `failed` in `status`.
6464
6464
  *
6465
6465
  * @capability processing.video, playback.read and events
6466
- * @see [Video and audio processing](../../docs/concepts/processing.md)
6466
+ * @see [Video and audio processing](../../docs/explanation/processing.md)
6467
6467
  * @since 1.0.0
6468
6468
  * @category Processing
6469
6469
  */
@@ -6492,7 +6492,7 @@ export type VideoFilter = Filter<VideoNode[]>;
6492
6492
  * result, `retry` applies it again, `dispose` withdraws it.
6493
6493
  *
6494
6494
  * @capability processing.audio, playback.read and events
6495
- * @see [Video and audio processing](../../docs/concepts/processing.md)
6495
+ * @see [Video and audio processing](../../docs/explanation/processing.md)
6496
6496
  * @since 1.0.0
6497
6497
  * @category Processing
6498
6498
  */
@@ -6551,7 +6551,7 @@ export interface ViewSettings {
6551
6551
  *
6552
6552
  * @capability processing.video, playback.read and events (like
6553
6553
  * {@link VideoFilter})
6554
- * @see [Video and audio processing](../../docs/concepts/processing.md)
6554
+ * @see [Video and audio processing](../../docs/explanation/processing.md)
6555
6555
  * @since 1.0.0
6556
6556
  * @category Processing
6557
6557
  */
@@ -6662,7 +6662,7 @@ export interface RenderSettings {
6662
6662
  *
6663
6663
  * @capability processing.video, playback.read and events (like
6664
6664
  * {@link VideoFilter})
6665
- * @see [Video and audio processing](../../docs/concepts/processing.md)
6665
+ * @see [Video and audio processing](../../docs/explanation/processing.md)
6666
6666
  * @since 1.0.0
6667
6667
  * @category Processing
6668
6668
  */
@@ -6766,7 +6766,7 @@ export interface RenderOptions extends Disposable {
6766
6766
  *
6767
6767
  * @capability processing.video
6768
6768
  * @player 0.5.20; older players refuse the request.
6769
- * @see [Video and audio processing](../../docs/concepts/processing.md)
6769
+ * @see [Video and audio processing](../../docs/explanation/processing.md)
6770
6770
  * @since 1.5.39
6771
6771
  * @category Processing
6772
6772
  */
@@ -7977,7 +7977,7 @@ export interface Resolver extends Disposable {
7977
7977
  * another plugin), so the plugin does not intercept opens itself.
7978
7978
  *
7979
7979
  * @capability source.resolve (file resolvers also `producer.av`)
7980
- * @see [Playback state, controls and sources](../../docs/concepts/playback.md)
7980
+ * @see [Playback state, controls and sources](../../docs/explanation/playback.md)
7981
7981
  * @since 1.0.0
7982
7982
  * @category Sources
7983
7983
  */
@@ -8751,7 +8751,7 @@ export interface BindingInfo extends BindingRef {
8751
8751
  * applies the change at once to every running plugin.
8752
8752
  *
8753
8753
  * @capability bindings.manage
8754
- * @see [Commands, menus and key bindings](../../docs/concepts/commands.md)
8754
+ * @see [Commands, menus and key bindings](../../docs/explanation/commands.md)
8755
8755
  * @since 1.0.0
8756
8756
  * @category Commands
8757
8757
  */