diff --git a/apps/docs/docs/widgets/downloads/img/filter-panel.png b/apps/docs/docs/widgets/downloads/img/filter-panel.png new file mode 100644 index 000000000..e819e80f9 Binary files /dev/null and b/apps/docs/docs/widgets/downloads/img/filter-panel.png differ diff --git a/apps/docs/docs/widgets/downloads/index.mdx b/apps/docs/docs/widgets/downloads/index.mdx index 19a621c12..85bace5e3 100644 --- a/apps/docs/docs/widgets/downloads/index.mdx +++ b/apps/docs/docs/widgets/downloads/index.mdx @@ -28,6 +28,7 @@ This widget displays torrent, Usenet, and miscellaneous download jobs, along wit import downloadsCard from "./img/screenshot.png"; import contextMenuImg from "./img/context-menu.png"; import advancedViewImg from "./img/advanced-view.png"; +import filterPanelImg from "./img/filter-panel.png";
Downloads widget showing torrent and usenet items @@ -49,28 +50,48 @@ import advancedViewImg from "./img/advanced-view.png"; />
+#### Advanced filter panel + +
+ Downloads advanced view with the status filter panel open +
+ ### Features -- **Responsive table** — columns automatically adapt to widget width, hiding less important columns at smaller sizes -- **Sortable columns** — click any column header to sort ascending/descending +- **Responsive compact table** — in compact mode, selected columns adapt to both widget width and height; narrow or short tiles hide speed/state columns, and the shortest tiles also hide the ETA column +- **Sortable columns** — click any sortable column header to sort the current view; the configured default controls the initial column and direction - **Column customization** — choose which columns to display, then hover a header to reveal its grab handle for reordering or drag its edge to resize it; layouts save automatically per widget -- **Right-click context menu** — pause, resume, delete downloads, or copy download names directly from the context menu when the selected integration grants interact access +- **Download-row context menu** — copy a download name or ID from any row; pause, resume, and delete actions appear when you have Interact access to that integration - **Row expansion** — click any row to see full details inline without opening a separate modal - **Hover tooltips** — hover a download name to see size, speeds, ETA, ratio, and category; open tooltips close when switching between compact and advanced mode -- **Global stats bar** — show a summary bar with queue progress, total size, speeds, ratio, and per-state counts in compact mode; advanced view always includes it +- **Global stats bar** — show queue progress, downloaded/total size, transfer speeds, global torrent ratio, and per-state counts in compact mode; advanced view always includes it - **Client filtering** — filter downloads by integration or status using the footer filter panel -- **Global controls** — pause/resume all downloads across all clients from the footer bar +- **Global controls** — pause/resume actionable queues from the footer bar, limited to selected integrations where you have Interact access - **Status indicators** — color-coded badges show download state at a glance -- **Speed overview** — total download and upload speeds displayed in the footer +- **Speed overview** — total download and upload speeds for the selected clients are displayed in the footer :::note -Compact layouts hide secondary columns as width decreases and can hide the footer on very short tiles. Downloads supports -Advanced view, which restores the denser table, stats, filters, and footer controls in a focused panel. +Compact layouts use both dimensions: below 500px wide, speed columns are hidden; below 300px wide, the ETA and state +columns are hidden too. A tile shorter than 180px hides speed and state columns, and a tile shorter than 120px also +hides ETA. The footer is hidden below 96px in compact mode. Advanced view bypasses these compact size reductions, +keeps the selected column set, and always includes the stats bar and footer controls, with the filter panel available +from the footer. -Pause, resume, delete, and global controls depend on integration permissions. `slskd` does not implement pause, resume, -or delete operations; if shared permission UI exposes those controls, they have no effect for that client. -The screenshot above is a download-row menu, separate from the shared widget context menu described in the board guide. +The filter panel changes the visible rows. Its client/status filters also change the stats bar's progress, size, and +state counts, while transfer-speed totals summarize the selected clients and the global torrent ratio summarizes the +selected torrent clients. The configured category/label filter can optionally be applied to the global torrent ratio +through **Use category filter for global torrent ratio**; footer client/status filters do not change that ratio. + +The per-item **Ratio** is sent bytes divided by the item's total size. **Global Ratio** is total uploaded bytes divided +by total downloaded bytes. + +Mutation controls depend on the integration's Interact permission. Users without that permission can still view rows and +use the row menu's copy actions. `slskd` is list-only: its pause, resume, and delete operations are no-ops, so those +controls have no effect for that client even when Interact permission exposes them. + +The screenshot above is a Downloads row menu, separate from the shared widget context menu. When board right-click menus +are enabled, the shared menu provides widget-level actions such as advanced view, widget options, refresh, and settings. ::: @@ -104,20 +125,20 @@ The screenshot above is a download-row menu, separate from the shared widget con }, { integration: slskdIntegration, - note: "Soulseek client (no mutation support)", + note: "Soulseek client (list-only; mutation controls are no-ops)", }, ]} /> ### Interactions -- **Right-click** any download to open a context menu with the actions allowed by that integration +- **Right-click** any download to copy its name or ID; pause, resume, and delete are available only with Interact access - **Click** any row to expand it and see full download details inline - **Hover** a download name for a quick stats tooltip - **Stats toggle** — show or hide the global stats bar in compact mode; advanced view always shows the stats bar -- **Pause / Resume** all downloads using the footer controls -- **Filter** by integration or status using the filter button in the footer -- **Sort** by clicking column headers; the direction applies to the current view +- **Pause / Resume** actionable queues using the footer controls +- **Filter** rows by integration or status using the filter button in the footer +- **Sort** by clicking sortable column headers; the default sort is configured per widget, while header changes apply to the current view diff --git a/apps/docs/docs/widgets/downloads/index.ts b/apps/docs/docs/widgets/downloads/index.ts index 1a7cd999f..f4e1945b1 100644 --- a/apps/docs/docs/widgets/downloads/index.ts +++ b/apps/docs/docs/widgets/downloads/index.ts @@ -30,19 +30,20 @@ export const downloadsWidget: WidgetDefinition = { { name: "Columns to show", description: - "Select the columns you want to display in the widget. Columns automatically hide/show based on widget width.", + "Select the columns you want to display in the widget. Compact layouts automatically hide/show selected columns based on widget width and height; advanced view keeps the selected columns visible.", values: `List of columns: ${columnsList.join(", ")}`, defaultValue: ["name", "progress", "downSpeed", "time", "state"].join(", "), }, { name: "Default sort column", - description: "The column used for initial sorting when the widget loads.", + description: + "The column used for initial sorting when the widget loads. Clicking a column header changes the current view only.", defaultValue: "progress", values: `List of columns: ${sortColumns.join(", ")}`, }, { name: "Invert sorting", - description: "This will invert the default sorting order.", + description: "This sets the initial sorting direction.", values: { type: "boolean" }, defaultValue: "no", }, @@ -84,8 +85,9 @@ export const downloadsWidget: WidgetDefinition = { defaultValue: "no", }, { - name: "Use filter to calculate Ratio", - description: "This will use the category filter when calculating the global torrent ratio.", + name: "Use category filter for global torrent ratio", + description: + "When enabled, the configured category/label filter is applied to the global torrent ratio. Footer client/status filters do not change this ratio.", values: { type: "boolean" }, defaultValue: "yes", },