adds a bunch of stuff for viewing and editing party metadata
## what's new
- **party info grid** - shows raid, settings, performance metrics, video
in a nice tile layout
- **party edit sidebar** - edit all the party metadata: battle settings,
clear time, button/chain/summon counts, video url, raid selection
- **raid selector** - browse raids by section (raids/events/solo),
search, sort by difficulty
- **input clearable prop** - inputs can now have a clear button
also some switch component cleanup and misc fixes
- declinePhantomClaim and getPendingPhantomClaims adapter methods
- useDeclinePhantomClaim mutation
- pendingPhantomClaims query
- crew field on PhantomPlayer type
- fix Select reactivity with external value changes
- add series/promotions to taxonomy sections
- add onDataChange callbacks to uncap sections
- add game CDN image helpers for batch imports
- expand suggestion type definitions
- correct api paths for username/email availability checks
- use singleton userAdapter instead of creating new instance
- use getApiBaseUrl() for signup to include /api/v1 prefix
- edit join date dialog
- add phantom with join date
- dropdown menus for member actions
- disable scout when roster full (30)
- invalidate gw queries on join date change
- CollectionArtifactCard for grid view
- CollectionArtifactRow for list view
- CollectionArtifactPane for sidebar details
- artifacts collection page with filters and infinite scroll
- getArtifactImage util
- update collection layout for artifacts tab
The addWeapons/addSummons methods were using Promise.all with Array.fill()
which created arrays where all elements referenced the same object. This
caused the request deduplication logic in BaseAdapter to cancel previous
requests since they all had the same body/requestId.
Fix:
- Use Array.from() with spread to create unique object instances
- Execute requests sequentially to avoid deduplication conflicts
- Improve error handling in AddToCollectionModal to filter CancelledErrors