feat(ui): Use 4 column grid for dashboard instances on 2xl screens - #1195
Conversation
WalkthroughThe Dashboard component's Instance grid layout is enhanced with an additional responsive breakpoint, adding support for four-column layouts on extra-large (2xl) screens. The grid classes are extended from three responsive sizes to four, enabling better use of wider displays. Changes
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~2 minutes Poem
🚥 Pre-merge checks | ✅ 2 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (2 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing touches
🧪 Generate unit tests (beta)
📜 Recent review detailsConfiguration used: Repository UI Review profile: CHILL Plan: Pro 📒 Files selected for processing (1)
🔇 Additional comments (1)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
This PR contains the following updates: | Package | Update | Change | |---|---|---| | [ghcr.io/autobrr/qui](https://github.com/autobrr/qui) | minor | `v1.12.0` → `v1.13.0` | --- ### Release Notes <details> <summary>autobrr/qui (ghcr.io/autobrr/qui)</summary> ### [`v1.13.0`](https://github.com/autobrr/qui/releases/tag/v1.13.0) [Compare Source](autobrr/qui@v1.12.0...v1.13.0) #### Highlights - Native RSS support for feeds - Cross-seed upgrades: directory scanning for data-based matching and category affix (prefix/suffix) modes - Automations improvements: Move action support, uncategorized filter option, hasMissingFiles condition, include-cross-seeds mode, configurable FREE\_SPACE source - UI improvements: inline pieces progress bar, clickable dashboard error counts, better mobile workflow modal - Orphan scan safeguards for shared save paths - External programs: new {comment} placeholder ##### Notable bug fixes: - More stable sorting for timestamp fields and last\_activity - Tracker icon fetching reliability and timeout cooldown handling - Cross-seed matching fixes (anime/pack matching, size mismatch handling, V2 hash recheck) - Orphan scan ignores .parts files and OS/NAS artifacts - qBittorrent tracker-down matching improvements and magnet redirect handling #### Changelog ##### New Features - [`9acd789`](autobrr/qui@9acd789): feat(automations): add Move action to Automations ([#​1079](autobrr/qui#1079)) ([@​Barcode-eng](https://github.com/Barcode-eng)) - [`80aaf22`](autobrr/qui@80aaf22): feat(automations): add hasMissingfiles condition ([#​1081](autobrr/qui#1081)) ([@​jabloink](https://github.com/jabloink)) - [`f942a71`](autobrr/qui@f942a71): feat(automations): add import button to empty state ([#​1111](autobrr/qui#1111)) ([@​jabloink](https://github.com/jabloink)) - [`6b2831e`](autobrr/qui@6b2831e): feat(automations): add include-cross-seeds mode with hardlink support, fix free-space projection ([#​1116](autobrr/qui#1116)) ([@​Barcode-eng](https://github.com/Barcode-eng)) - [`b152a6a`](autobrr/qui@b152a6a): feat(automations): add tooltips to disabled conditions ([#​1286](autobrr/qui#1286)) ([@​jabloink](https://github.com/jabloink)) - [`f36eb76`](autobrr/qui@f36eb76): feat(automations): add uncategorized category filter option ([#​1268](autobrr/qui#1268)) ([@​aulterego](https://github.com/aulterego)) - [`d7dcb58`](autobrr/qui@d7dcb58): feat(automations): configurable FREE\_SPACE source (qBit or path) ([#​1181](autobrr/qui#1181)) ([@​s0up4200](https://github.com/s0up4200)) - [`d685bee`](autobrr/qui@d685bee): feat(backups): add tooltips and restore from lastest button ([#​1258](autobrr/qui#1258)) ([@​jabloink](https://github.com/jabloink)) - [`4c5a975`](autobrr/qui@4c5a975): feat(crossseed): add category affix with prefix/suffix modes ([#​1296](autobrr/qui#1296)) ([@​jabloink](https://github.com/jabloink)) - [`28cd96d`](autobrr/qui@28cd96d): feat(crossseed): add directory scanner for data-based matching ([#​1203](autobrr/qui#1203)) ([@​s0up4200](https://github.com/s0up4200)) - [`fe84eb0`](autobrr/qui@fe84eb0): feat(dirscan): resumable scans with per-run limit ([#​1274](autobrr/qui#1274)) ([@​s0up4200](https://github.com/s0up4200)) - [`1af2a12`](autobrr/qui@1af2a12): feat(dockerfile): add bash to Dockerfile ([#​903](autobrr/qui#903)) ([@​ryanwalder](https://github.com/ryanwalder)) - [`5c84c3f`](autobrr/qui@5c84c3f): feat(docs): add browser extension links and URL shorteners ([@​s0up4200](https://github.com/s0up4200)) - [`13c5461`](autobrr/qui@13c5461): feat(linking): add option to fallback on linking failure ([#​1056](autobrr/qui#1056)) ([@​Audionut](https://github.com/Audionut)) - [`5f7031f`](autobrr/qui@5f7031f): feat(orphanscan): protect shared save paths across instances ([#​1197](autobrr/qui#1197)) ([@​s0up4200](https://github.com/s0up4200)) - [`341092d`](autobrr/qui@341092d): feat(rss): add native rss support ([#​801](autobrr/qui#801)) ([@​s0up4200](https://github.com/s0up4200)) - [`8d2a371`](autobrr/qui@8d2a371): feat(sort): add stable fallback sorting for timestamp fields ([#​1317](autobrr/qui#1317)) ([@​aulterego](https://github.com/aulterego)) - [`28cf4ad`](autobrr/qui@28cf4ad): feat(torrents): use custom tracker names in table ([#​1120](autobrr/qui#1120)) ([@​s0up4200](https://github.com/s0up4200)) - [`e0d2bb4`](autobrr/qui@e0d2bb4): feat(ui): Use 4 column grid for dashboard instances on 2xl screens ([#​1195](autobrr/qui#1195)) ([@​ewenjo](https://github.com/ewenjo)) - [`7bc98e1`](autobrr/qui@7bc98e1): feat(ui): add inline pieces progress bar visualization ([#​1050](autobrr/qui#1050)) ([@​s0up4200](https://github.com/s0up4200)) - [`0154226`](autobrr/qui@0154226): feat(web): Improve performance for torrents with large file counts ([#​1252](autobrr/qui#1252)) ([@​0rkag](https://github.com/0rkag)) - [`a91df70`](autobrr/qui@a91df70): feat(web): allow merging trackers into existing groups ([#​1175](autobrr/qui#1175)) ([@​jabloink](https://github.com/jabloink)) - [`132c512`](autobrr/qui@132c512): feat(web): improve workflow modal mobile ([#​1302](autobrr/qui#1302)) ([@​jabloink](https://github.com/jabloink)) - [`a7f59ab`](autobrr/qui@a7f59ab): feat(web): make dashboard error counts clickable ([#​937](autobrr/qui#937)) ([@​Gykes](https://github.com/Gykes)) ##### Bug Fixes - [`c6f86e2`](autobrr/qui@c6f86e2): fix(auth): recover cleanly behind upstream SSO ([#​1142](autobrr/qui#1142)) ([@​s0up4200](https://github.com/s0up4200)) - [`0c19899`](autobrr/qui@0c19899): fix(automations): handle -1 value for incomplete torrent completion\_on ([#​1186](autobrr/qui#1186)) ([@​s0up4200](https://github.com/s0up4200)) - [`59a9120`](autobrr/qui@59a9120): fix(automations): include Move action in `rulesUseCondition` ([#​1079](autobrr/qui#1079)) ([#​1287](autobrr/qui#1287)) ([@​Barcode-eng](https://github.com/Barcode-eng)) - [`618d945`](autobrr/qui@618d945): fix(automations): not being able to enter multiple tags in tag action ([#​1131](autobrr/qui#1131)) ([@​Winter](https://github.com/Winter)) - [`bffecbd`](autobrr/qui@bffecbd): fix(automations): restore preview API and add loading state ([#​1194](autobrr/qui#1194)) ([@​s0up4200](https://github.com/s0up4200)) - [`9b3975b`](autobrr/qui@9b3975b): fix(automations): speed up delete hardlink-copy expansion ([#​1187](autobrr/qui#1187)) ([@​s0up4200](https://github.com/s0up4200)) - [`1549bcf`](autobrr/qui@1549bcf): fix(automations): support qBittorrent global/unlimited limits ([#​1134](autobrr/qui#1134)) ([@​s0up4200](https://github.com/s0up4200)) - [`e31d4aa`](autobrr/qui@e31d4aa): fix(automations): validate local access for hasMissingFiles ([#​1281](autobrr/qui#1281)) ([@​jabloink](https://github.com/jabloink)) - [`dba3419`](autobrr/qui@dba3419): fix(crossseed): allow extra files in size mismatch check ([#​1149](autobrr/qui#1149)) ([@​s0up4200](https://github.com/s0up4200)) - [`f7dced6`](autobrr/qui@f7dced6): fix(crossseed): correct match type for episode-from-pack cross-seeding ([#​1250](autobrr/qui#1250)) ([@​neelmehta247](https://github.com/neelmehta247)) - [`007d87e`](autobrr/qui@007d87e): fix(crossseed): normalize ampersand to "and" for title matching ([#​1202](autobrr/qui#1202)) ([@​s0up4200](https://github.com/s0up4200)) - [`048c034`](autobrr/qui@048c034): fix(crossseed): prevent automation search stalls ([#​1272](autobrr/qui#1272)) ([@​s0up4200](https://github.com/s0up4200)) - [`5c48ccb`](autobrr/qui@5c48ccb): fix(crossseed): prevent false cross-seed delete warnings ([#​1148](autobrr/qui#1148)) ([@​s0up4200](https://github.com/s0up4200)) - [`eda0eee`](autobrr/qui@eda0eee): fix(crossseed): reduce false negatives for anime matching ([#​1243](autobrr/qui#1243)) ([@​s0up4200](https://github.com/s0up4200)) - [`8b08b87`](autobrr/qui@8b08b87): fix(crossseed): restore reuse matched category option ([#​1150](autobrr/qui#1150)) ([@​s0up4200](https://github.com/s0up4200)) - [`b69682d`](autobrr/qui@b69682d): fix(crossseed): support v2 hashes for recheck ([#​1237](autobrr/qui#1237)) ([@​s0up4200](https://github.com/s0up4200)) - [`8fb16c1`](autobrr/qui@8fb16c1): fix(database): remove noisy stmt cache promotion log ([#​1307](autobrr/qui#1307)) ([@​s0up4200](https://github.com/s0up4200)) - [`c8d068b`](autobrr/qui@c8d068b): fix(docs): correct autobrr integration documentation ([@​s0up4200](https://github.com/s0up4200)) - [`c6f4a4a`](autobrr/qui@c6f4a4a): fix(docs): use absolute URLs for extension links ([@​s0up4200](https://github.com/s0up4200)) - [`48510e9`](autobrr/qui@48510e9): fix(instances): auth bypass persistence in instance form ([#​1219](autobrr/qui#1219)) ([@​s0up4200](https://github.com/s0up4200)) - [`0b71b46`](autobrr/qui@0b71b46): fix(makefile): make fmt target only format changed files ([#​1200](autobrr/qui#1200)) ([@​s0up4200](https://github.com/s0up4200)) - [`1f13b0e`](autobrr/qui@1f13b0e): fix(orphanscan): avoid duplicate inode entries in scans ([#​1212](autobrr/qui#1212)) ([@​s0up4200](https://github.com/s0up4200)) - [`fecfebd`](autobrr/qui@fecfebd): fix(orphanscan): gate scans until qBittorrent settled ([#​1193](autobrr/qui#1193)) ([@​s0up4200](https://github.com/s0up4200)) - [`77b2fd6`](autobrr/qui@77b2fd6): fix(orphanscan): ignore .parts files from qBittorrent partial downloads ([#​1264](autobrr/qui#1264)) ([@​s0up4200](https://github.com/s0up4200)) - [`0f7e646`](autobrr/qui@0f7e646): fix(orphanscan): ignore OS/NAS/k8s artifacts ([#​1259](autobrr/qui#1259)) ([@​s0up4200](https://github.com/s0up4200)) - [`b55881c`](autobrr/qui@b55881c): fix(orphanscan): reduce MaxFilesPerRun and fix accordion chevrons ([#​1095](autobrr/qui#1095)) ([@​s0up4200](https://github.com/s0up4200)) - [`0cb682c`](autobrr/qui@0cb682c): fix(qbittorrent): force sync+retry in BulkAction ([#​1097](autobrr/qui#1097)) ([@​s0up4200](https://github.com/s0up4200)) - [`aba9b7e`](autobrr/qui@aba9b7e): fix(qbittorrent): strip URLs before tracker-down pattern matching ([#​1224](autobrr/qui#1224)) ([@​s0up4200](https://github.com/s0up4200)) - [`a60076f`](autobrr/qui@a60076f): fix(reflinktree): fall back to FICLONERANGE when FICLONE unsupported ([#​1221](autobrr/qui#1221)) ([@​s0up4200](https://github.com/s0up4200)) - [`d79a0db`](autobrr/qui@d79a0db): fix(search): handle magnet redirects from indexer downloads ([#​1211](autobrr/qui#1211)) ([@​s0up4200](https://github.com/s0up4200)) - [`1e920c4`](autobrr/qui@1e920c4): fix(sort): truncate `last_activity` to 60s for stability ([#​1318](autobrr/qui#1318)) ([@​aulterego](https://github.com/aulterego)) - [`931d720`](autobrr/qui@931d720): fix(torznab): respect per-indexer caps limits ([#​1265](autobrr/qui#1265)) ([@​s0up4200](https://github.com/s0up4200)) - [`6fe91e8`](autobrr/qui@6fe91e8): fix(trackericons): apply failure cooldown on timeouts ([#​1322](autobrr/qui#1322)) ([@​s0up4200](https://github.com/s0up4200)) - [`35a50b5`](autobrr/qui@35a50b5): fix(web): add max-height to import workflow dialog ([#​1207](autobrr/qui#1207)) ([@​s0up4200](https://github.com/s0up4200)) - [`5bd2706`](autobrr/qui@5bd2706): fix(web): hide redundant actions dropdown ([#​1305](autobrr/qui#1305)) ([@​jabloink](https://github.com/jabloink)) - [`307907f`](autobrr/qui@307907f): fix(web): improve Reannounce In column display ([#​1320](autobrr/qui#1320)) ([@​soggy-cr0uton](https://github.com/soggy-cr0uton)) - [`7881bdc`](autobrr/qui@7881bdc): fix(web): make Add Instance dialog scrollable on small viewports ([#​1232](autobrr/qui#1232)) ([@​s0up4200](https://github.com/s0up4200)) - [`bec5433`](autobrr/qui@bec5433): fix(web): make dialogs scrollable on small viewports ([#​1233](autobrr/qui#1233)) ([@​s0up4200](https://github.com/s0up4200)) - [`0e47b9e`](autobrr/qui@0e47b9e): fix(web): prevent nested scroll containers on iOS ([#​1229](autobrr/qui#1229)) ([@​s0up4200](https://github.com/s0up4200)) - [`f2f0616`](autobrr/qui@f2f0616): fix(web): redirect already authenticated users to dashboard ([#​1127](autobrr/qui#1127)) ([@​burritothief](https://github.com/burritothief)) - [`7a633cf`](autobrr/qui@7a633cf): fix(web): toast message when searching then adding cross-seeds ([#​1290](autobrr/qui#1290)) ([@​rybertm](https://github.com/rybertm)) - [`da14100`](autobrr/qui@da14100): fix(web): use fixed px for sidebar width instead of rem ([#​1313](autobrr/qui#1313)) ([@​soggy-cr0uton](https://github.com/soggy-cr0uton)) ##### Other Changes - [`c93a326`](autobrr/qui@c93a326): chore(deps): bump the golang group across 1 directory with 16 updates ([#​1261](autobrr/qui#1261)) ([@​dependabot](https://github.com/dependabot)\[bot]) - [`d3de074`](autobrr/qui@d3de074): chore(docs): clarify tracker pattern necessity in documentation ([@​s0up4200](https://github.com/s0up4200)) - [`2351097`](autobrr/qui@2351097): chore(lint): Add Linting workflow to CI ([#​1270](autobrr/qui#1270)) ([@​Barcode-eng](https://github.com/Barcode-eng)) - [`e8436e3`](autobrr/qui@e8436e3): chore(lint): update linting base branch from main to develop ([@​s0up4200](https://github.com/s0up4200)) - [`e36afc8`](autobrr/qui@e36afc8): chore: add Ko-fi funding and pre-commit config ([#​1315](autobrr/qui#1315)) ([@​s0up4200](https://github.com/s0up4200)) - [`df4375e`](autobrr/qui@df4375e): chore: update copyright headers to 2025-2026 ([#​1303](autobrr/qui#1303)) ([@​s0up4200](https://github.com/s0up4200)) - [`7a6f2d1`](autobrr/qui@7a6f2d1): docs(automations): clarify tag behavior ([#​1260](autobrr/qui#1260)) ([@​jabloink](https://github.com/jabloink)) - [`05e2028`](autobrr/qui@05e2028): refactor(build): cross platform building ([#​1060](autobrr/qui#1060)) ([@​Audionut](https://github.com/Audionut)) - [`6355f4f`](autobrr/qui@6355f4f): refactor(crosssed): require full recheck for disc based content ([#​1168](autobrr/qui#1168)) ([@​Audionut](https://github.com/Audionut)) - [`7466a98`](autobrr/qui@7466a98): refactor(filesmanager): improve logging messages for orphan cleanup process ([@​s0up4200](https://github.com/s0up4200)) - [`ad90209`](autobrr/qui@ad90209): refactor(orphan): improve disc based content handling ([#​1167](autobrr/qui#1167)) ([@​Audionut](https://github.com/Audionut)) - [`3b85f8a`](autobrr/qui@3b85f8a): refactor(web): use TanStack Query for path autocomplete ([#​1309](autobrr/qui#1309)) ([@​soggy-cr0uton](https://github.com/soggy-cr0uton)) **Full Changelog**: <autobrr/qui@v1.12.0...v1.13.0> #### Docker images - `docker pull ghcr.io/autobrr/qui:v1.13.0` - `docker pull ghcr.io/autobrr/qui:latest` #### What to do next? - Join our [Discord server](https://discord.autobrr.com/qui) Thank you for using qui! </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR is behind base branch, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi42OS4yIiwidXBkYXRlZEluVmVyIjoiNDIuNjkuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiaW1hZ2UiXX0=--> Reviewed-on: https://gitea.alexlebens.dev/alexlebens/infrastructure/pulls/3540 Co-authored-by: Renovate Bot <renovate-bot@alexlebens.net> Co-committed-by: Renovate Bot <renovate-bot@alexlebens.net>
Tested with both
xl:grid-cols-4and2xl:grid-cols-4, but found that 4 columns can be too small on the lower end ofxlsizes.Before

After
Summary by CodeRabbit
✏️ Tip: You can customize this high-level summary in your review settings.