Commit graph

5,657 commits

Author SHA1 Message Date
anatawa12
41e25d4e86
Merge pull request #2943 from vrc-get/dependabot/cargo/sysinfo-0.39.3
chore(deps): bump sysinfo from 0.39.2 to 0.39.3
2026-06-02 10:00:15 +09:00
anatawa12
3c499f9d6a
Merge pull request #2942 from vrc-get/dependabot/cargo/reqwest-0.13.4
chore(deps): bump reqwest from 0.13.3 to 0.13.4
2026-06-02 09:59:47 +09:00
dependabot[bot]
805be35ac6
chore(deps): bump sysinfo from 0.39.2 to 0.39.3
Bumps [sysinfo](https://github.com/GuillaumeGomez/sysinfo) from 0.39.2 to 0.39.3.
- [Changelog](https://github.com/GuillaumeGomez/sysinfo/blob/main/CHANGELOG.md)
- [Commits](https://github.com/GuillaumeGomez/sysinfo/compare/v0.39.2...v0.39.3)

---
updated-dependencies:
- dependency-name: sysinfo
  dependency-version: 0.39.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-02 00:12:47 +00:00
dependabot[bot]
901368c9bf
chore(deps): bump reqwest from 0.13.3 to 0.13.4
Bumps [reqwest](https://github.com/seanmonstar/reqwest) from 0.13.3 to 0.13.4.
- [Release notes](https://github.com/seanmonstar/reqwest/releases)
- [Changelog](https://github.com/seanmonstar/reqwest/blob/master/CHANGELOG.md)
- [Commits](https://github.com/seanmonstar/reqwest/compare/v0.13.3...v0.13.4)

---
updated-dependencies:
- dependency-name: reqwest
  dependency-version: 0.13.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-06-02 00:12:33 +00:00
github-actions[bot]
09c8190634 v1.9.2-rc.0 vpm-v0.0.16-rc.0 v1.9.2-rc.0 2026-05-30 16:11:35 +00:00
anatawa12
5eed047fa4
Merge pull request #2940 from vrc-get/publish-workflow-crash
build: check-static-link for aarch64 linux is broken
2026-05-31 01:10:13 +09:00
anatawa12
056073834c
build: check-static-link for aarch64 linux is broken 2026-05-31 00:58:26 +09:00
anatawa12
c4117c7457
ci: allow dry-run for non-master branch 2026-05-31 00:37:37 +09:00
anatawa12
3bf6b96b93
ci: dry-run for cli build 2026-05-31 00:33:40 +09:00
anatawa12
00fb4d8546
ci: upload artifacts regardless build failure 2026-05-31 00:28:53 +09:00
github-actions[bot]
4d4c0c27d3 gui v1.1.6-rc.0 gui-v1.1.6-rc.0 2026-05-30 14:43:02 +00:00
anatawa12
a31c947c1a
Merge pull request #2935 from nekochanfood/feat/reorder-user-repos
feat: リポジトリ一覧で並び替えができるようにする
2026-05-30 21:48:44 +09:00
nekochanfood
f6e677909c fix(gui): reject remove/reorder when settings.json drifted externally
remove/reorder targeted userRepos entries by array position only. An
external write to settings.json (another ALCOM instance, VCC, vrc-get
CLI, manual edit) between the frontend's last fetch and the call
could silently delete or reorder the wrong repo.

The frontend already has the expected id (part of TauriUserRepository),
so send it alongside the index and have the backend verify the repo at
that index still has the expected id before mutating. On mismatch,
reject with an `unrecoverable_str` error; the frontend's existing
onError + onSettled refetch rolls back optimistic state and shows the
on-disk truth.

- environment_remove_repository takes (index, expected_id)
- environment_reorder_repositories takes Vec<TauriUserRepositoryRef>;
  all pairs verified up front, no partial reorder on mismatch
- verify_repo_at_index helper centralises the lookup + comparison
2026-05-30 20:50:24 +09:00
nekochanfood
8b58270235 chore: move the order of the change 2026-05-30 20:27:04 +09:00
nekochanfood
c1b297e02a chore: clean up changelog entries for reorder/remove repo changes 2026-05-30 20:21:02 +09:00
Kissa Ruokanen
a0ec779fab
Merge pull request #1 from nekochanfood/feat/improve-duplicate-repo-handling
Feat/improve duplicate repo handling
2026-05-30 14:56:51 +09:00
nekochanfood
800278a0c3 style(vpm): satisfy fmt and clippy on reorder_user_repos_by_indices
Auto-applied cargo fmt for the collect-chain split, then folded the
nested `if let` into a let-chain and replaced the manual `if let Some`
loop with `into_iter().flatten()`.
2026-05-30 14:55:43 +09:00
nekochanfood
334492e5c6 refactor: clean up issues found in branch review
- vpm: drop unused id-based reorder_user_repos; reorder_user_repos_by_indices is the only caller
- CHANGELOG: reflect the actual public API surface (reorder_user_repos_by_indices, remove_repo_at_index)
- gui: rollback optimistic delete on error in RemoveRepositoryDialog, matching setHideRepository
- gui: demote per-reorder log from info to debug to reduce noise
2026-05-30 14:45:42 +09:00
nekochanfood
1a947b7a6c fix(gui): preserve listId identity for duplicate repos across refetch
Repos with duplicate (id, url) pairs had their per-row React keys
regenerated as `crypto.randomUUID()` on every refetch, causing scroll
reset and remount on the entire list. Stabilizing by `${id} ${url}`
key with an iteration-order counter would normally fix this, but for
duplicate-keyed rows the counter assignment depends on iteration
order: when two such repos swap positions, their slot keys swap, and
the lookup returns each other's UUID — React reconciles by tearing
both rows down (visible as a flicker on the row the dragged row
crossed over).

- Stabilize listId across refetch via listIdMapRef keyed on slot key
- Extract computeSlotKey helper for reuse
- Pin listIds to the new optimistic order in reorderMutation.onMutate
  so the post-refetch augmentation lookup returns the same listIds
- Snapshot and restore the previous map in onError so a failed reorder
  rolls back cleanly
2026-05-30 14:45:13 +09:00
nekochanfood
514f52a419 Revert "fix(gui): fix DnD drop artifact and item displacement flicker"
This reverts commit 6dfdd9c5f3.
2026-05-30 12:53:59 +09:00
nekochanfood
3e42f0de4e Revert "fix(gui): fix double-row artifact and scroll reset on dnd drop"
This reverts commit 21a0e19722.
2026-05-30 12:53:54 +09:00
nekochanfood
6dfdd9c5f3 fix(gui): fix DnD drop artifact and item displacement flicker
Replaced sideEffects-based opacity hack (broken by React re-renders) with
a droppingListId state that keeps the source row hidden for the duration of
the drop animation via React's own style prop.

Removed the visualIndex estimate (rowIndex ± 1 based on transform.y) that
caused continuous className toggling during drag; rows now use their stable
rowIndex for stripe coloring, eliminating the flicker.
2026-05-30 12:50:06 +09:00
nekochanfood
21a0e19722 fix(gui): fix double-row artifact and scroll reset on dnd drop
Two regressions introduced by the listId/UUID change:

- Scroll reset: crypto.randomUUID() in useMemo regenerated all listIds
  on every re-fetch, causing React to unmount/remount all rows and lose
  scroll position. Fixed by using String(r.index) instead — index is
  stable across re-fetches for items that haven't moved, so React can
  reconcile rows in place.

- Double-row artifact: on drop, isDragging becomes false before the
  DragOverlay drop animation completes, making the real row visible at
  the destination while the overlay is still animating there. Fixed by
  using defaultDropAnimationSideEffects to force opacity:0 on the
  original element for the duration of the drop animation.
2026-05-30 12:12:24 +09:00
nekochanfood
6ab9c49c94 fix(gui): stabilize repo list against duplicate IDs in userRepos
Repositories with duplicate `id` values in settings.json caused the
frontend list to break: React keys were non-unique, dnd-kit's
SortableContext misbehaved, and the Map lookup silently discarded
duplicate entries.

- Add `index` field to `TauriUserRepository` (position in the
  userRepos array, never persisted) so operations can target a
  specific entry regardless of ID uniqueness
- Replace ID-based remove/reorder commands with index-based variants
  (`remove_repo_at_index`, `reorder_user_repos_by_indices`) in both
  vpm_settings and the Tauri command layer
- Augment each repo with a frontend-only `listId` (crypto.randomUUID)
  used exclusively as React key and dnd-kit sortable item ID
2026-05-30 11:37:11 +09:00
Kissa Ruokanen
04adf285b5 style(gui): fix CSS selector formatting to satisfy Biome formatter 2026-05-30 09:41:43 +09:00
anatawa12
665513d0fc
Merge branch 'master' into feat/reorder-user-repos 2026-05-30 01:12:28 +09:00
anatawa12
6f8cd53159
Merge pull request #2939 from vrc-get/fix-buildx-devtools-not-working
build: cargo xtask build-alcom --devtools not working
2026-05-30 01:12:17 +09:00
anatawa12
ec6454b0d4
fix: cargo xtask build-alcom --devtools not working 2026-05-30 01:04:29 +09:00
nekochanfood
533a40b1eb fix(gui): account for vertical scrollbar width in ScrollableCardTable
When the vertical scrollbar is visible, its overlay covers the rightmost
10px of the table content. Add pe-2.5 to the content wrapper via CSS
so all ScrollableCardTable instances reserve space for the scrollbar.
2026-05-29 22:19:31 +09:00
nekochanfood
90c7e249cd fix(gui): fix scroll stuttering when dragging repository list items
- Move guiAnimation query and setHideRepository mutation from each
  RepositoryRow to PageBody, passing them down as props. Because
  useSortable subscribes all rows to DnD context, every pointermove
  during drag re-rendered every row. With O(N) expensive hooks per row
  this blocked the main thread for ~130ms per event (~7fps).

- Disable dnd-kit's built-in autoScroll (autoScroll={false}) and replace
  it with a useDragAutoScroll hook. dnd-kit's AutoScroller caused jitter
  due to wrong scroll-container detection in Radix UI ScrollArea and
  double-smoothing from the viewport's scroll-behavior: smooth. The
  custom hook targets the viewport directly via viewportRef and uses
  behavior: instant to avoid CSS smooth-scroll interference.

- Suppress background-color transition on rows during active drag to
  reduce paint operations when rows shift position.

- Replace orderedIds.includes() with a Set lookup in collisionDetection.
2026-05-29 20:56:30 +09:00
Kissa Ruokanen
e057838795 docs(changelog-gui): add entry for drag-and-drop repository reordering 2026-05-29 16:04:20 +09:00
Kissa Ruokanen
437a63bcc6 fix: sort @dnd-kit/core imports to satisfy biome lint 2026-05-29 16:02:18 +09:00
Kissa Ruokanen
836bf82351
Merge branch 'master' into feat/reorder-user-repos 2026-05-29 15:47:06 +09:00
Kissa Ruokanen
316c73a6b6 feat: animate drag overlay row color based on current drop position
Track the hovered droppable via onDragOver and compute the overlay's
visual index so its background color updates in real-time as it moves
between rows, matching the same bg-secondary/30 / transition spec used
by the sortable rows.
2026-05-29 15:38:35 +09:00
Kissa Ruokanen
ec04492af8 Merge branch 'feat/reorder-user-repos' of https://github.com/nekochanfood/vrc-get into feat/reorder-user-repos 2026-05-29 15:26:38 +09:00
Kissa Ruokanen
ebd117afd2 feat: animate row colors during drag with O(k) re-renders
Replace useDndContext() + arrayMove approach with transform.y sign
detection to compute visual row index. Previously all n rows subscribed
to the dnd context and re-rendered on every collision change, each
doing an O(n) arrayMove+indexOf -- O(n^2) total.

Now only rows whose transform changes re-render, and each computes its
visual index in O(1) from the sign of transform.y from useSortable.
Total cost is O(k) where k is the number of displaced rows (typically 1-2).

Also adds background-color to the inline transition string so the
200ms color animation works correctly alongside the transform animation,
and removes guiAnimation prop drilling through RepositoryTableBody.
2026-05-29 15:26:29 +09:00
Kissa Ruokanen
253a0266e6 fix: vertically center checkboxes in repository list
Wrap checkbox in flex container to eliminate inline-block descender
space, which caused the button to align to the text baseline rather
than the vertical center of the cell.
2026-05-29 15:14:27 +09:00
Kissa Ruokanen
0cf635e892 fix: vertically center checkboxes in repository list
Add align-middle to CELL_CLASS so all table cells use vertical-align: middle.
2026-05-29 14:56:48 +09:00
anatawa12
f8923dce1b
Merge pull request #2936 from vrc-get/funding-yml
docs: add FUNDING.yml
2026-05-29 14:52:50 +09:00
anatawa12
9fc228eed0
docs: add FUNDING.yml 2026-05-29 14:46:45 +09:00
Kissa Ruokanen
54113144a8 refactor: clean up animation-related code in repository list
- Remove redundant isDragging state; derive from activeId !== null
- Move TABLE_HEAD and DRAG_OVERLAY_MODIFIERS to module level to avoid
  per-render allocations
- Remove unnecessary ?? true fallback on initialData: true query result
- Eliminate guiAnimation prop drilling through RepositoryTableBody;
  RepositoryRow now reads directly from the shared React Query cache
2026-05-29 14:37:10 +09:00
Kissa Ruokanen
0ab6c9434b feat: add smooth drop animation for repository reordering
Use DragOverlay from @dnd-kit/core to show a floating row clone while
dragging, giving a smooth drop animation on release. The overlay uses
colgroup-based fixed column widths measured from the thead at drag start,
so columns align pixel-perfectly with the underlying table. Movement is
restricted to the vertical axis via a custom modifier.

Animation respects the existing gui-animation setting: dropAnimation is
disabled when animations are turned off, and non-active rows lose their
transition as well.

Extract shared RepositoryRowCells component so the table row and the drag
overlay render identical structure and styling from a single definition.
2026-05-29 14:33:52 +09:00
Kissa Ruokanen
9d94d8b929 refactor: memoize dragStyle and remove redundant index checks in handleDragEnd 2026-05-29 14:14:14 +09:00
Kissa Ruokanen
d1887eb467 fix: eliminate drag stutter by using custom collision detection
Replace live orderedIds updates during onDragOver with a custom
collision detection that filters droppable targets to user repos only.
This ensures `over` is always a valid user repo (clamping to the
boundary when the cursor leaves the list), so dnd-kit handles all
visual movement through CSS transforms without DOM reordering.
Eliminates the position warp that occurred when items swapped.
2026-05-29 14:06:13 +09:00
Kissa Ruokanen
45ed34f573 fix: preserve drag position when cursor leaves list bounds
Track last valid sort order via dragOverOrderRef during onDragOver so
that when the pointer leaves the sortable region (triggering cancel or
landing on a non-user-repo row), the item stays at its last reached
position instead of snapping back or jumping to the end of the list.
Also disable pointer-events on HNavBar while dragging to prevent Radix
UI from stealing pointer capture.
2026-05-29 13:39:11 +09:00
Kissa Ruokanen
930715960e fix: prevent snap-back when dragging outside list bounds
Use closestCenter collision detection so over never becomes null
when the cursor moves beyond the top or bottom of the sortable list.
2026-05-29 13:21:26 +09:00
Kissa Ruokanen
8db24b7b7c feat: implement drag-and-drop reordering of user repositories
Use @dnd-kit/core and @dnd-kit/sortable to wire up the existing drag
handles so users can reorder repositories by dragging. DndContext is
placed at the page level so pointer tracking is not lost when the cursor
moves outside the list area. Adds an info log in the Rust command so the
new order is visible in the app log viewer.
2026-05-29 13:19:33 +09:00
Kissa Ruokanen
44ed683c23 feat: dim drag handle and show not-allowed cursor for non-reorderable repositories
Official and curated repositories cannot be reordered, so their drag
handles are now rendered with opacity-50 and cursor-not-allowed to
visually indicate they are not interactive, consistent with how their
remove buttons are already disabled.
2026-05-29 12:40:56 +09:00
Kissa Ruokanen
c248b0ed55 chore: regenerate bindings.ts with environmentReorderRepositories 2026-05-29 10:57:51 +09:00
Kissa Ruokanen
9d11a5e816
Merge branch 'master' into feat/reorder-user-repos 2026-05-29 10:48:40 +09:00