diff --git a/src/lib/components/database/cells/RaidGroupFlagsCell.svelte b/src/lib/components/database/cells/RaidGroupFlagsCell.svelte
index 6bf8eaed..52d3d7d4 100644
--- a/src/lib/components/database/cells/RaidGroupFlagsCell.svelte
+++ b/src/lib/components/database/cells/RaidGroupFlagsCell.svelte
@@ -12,7 +12,8 @@
{#if row.hl}HL{/if}
{#if row.extra}{/if}
{#if row.guidebooks}Guidebooks{/if}
- {#if !row.hl && !row.extra && !row.guidebooks}
+ {#if row.unlimited}Unlimited{/if}
+ {#if !row.hl && !row.extra && !row.guidebooks && !row.unlimited}
—
{/if}
@@ -47,6 +48,11 @@
background: #28a745;
color: white;
}
+
+ &.unlimited {
+ background: #fd7e14;
+ color: white;
+ }
}
.no-flags {
diff --git a/src/lib/components/grids/CharacterGrid.svelte b/src/lib/components/grids/CharacterGrid.svelte
index bc64e2e5..5edeb76a 100644
--- a/src/lib/components/grids/CharacterGrid.svelte
+++ b/src/lib/components/grids/CharacterGrid.svelte
@@ -13,15 +13,20 @@
mainWeaponElement?: number | null | undefined
partyElement?: number | null | undefined
container?: string | undefined
+ unlimited?: boolean
}
let {
characters = [],
mainWeaponElement = undefined,
partyElement = undefined,
- container = 'main-characters'
+ container = 'main-characters',
+ unlimited = false
}: Props = $props()
+ // Dynamic slot count based on unlimited flag
+ const slotCount = $derived(unlimited ? 7 : 5)
+
import CharacterUnit from '$lib/components/units/CharacterUnit.svelte'
const ctx = getContext('party')
@@ -29,9 +34,9 @@
// Create array with proper empty slots
let characterSlots = $derived.by(() => {
- const slots: (GridCharacter | undefined)[] = Array(5).fill(undefined)
+ const slots: (GridCharacter | undefined)[] = Array(slotCount).fill(undefined)
characters.forEach(char => {
- if (char.position >= 0 && char.position < 5) {
+ if (char.position >= 0 && char.position < slotCount) {
slots[char.position] = char
}
})
@@ -42,6 +47,7 @@
{#each characterSlots as character, i}
@@ -95,6 +101,10 @@
grid-template-columns: repeat(5, minmax(0, 1fr));
gap: $unit-3x;
+ &.unlimited {
+ grid-template-columns: repeat(7, minmax(0, 1fr));
+ }
+
& > li {
list-style: none;
}
diff --git a/src/lib/components/party/Party.svelte b/src/lib/components/party/Party.svelte
index 35d95dad..393b5179 100644
--- a/src/lib/components/party/Party.svelte
+++ b/src/lib/components/party/Party.svelte
@@ -999,6 +999,7 @@
characters={party.characters}
{mainWeaponElement}
{partyElement}
+ unlimited={(party as any)?.raid?.group?.unlimited}
/>
{/if}
diff --git a/src/lib/types/RaidGroup.d.ts b/src/lib/types/RaidGroup.d.ts
index 32f6515f..4a5a7169 100644
--- a/src/lib/types/RaidGroup.d.ts
+++ b/src/lib/types/RaidGroup.d.ts
@@ -12,4 +12,5 @@ export interface RaidGroup {
extra: boolean
guidebooks: boolean
hl: boolean
+ unlimited: boolean
}
diff --git a/src/lib/types/api/raid.ts b/src/lib/types/api/raid.ts
index d5380945..25f63614 100644
--- a/src/lib/types/api/raid.ts
+++ b/src/lib/types/api/raid.ts
@@ -29,6 +29,7 @@ export interface RaidGroupFlat {
hl: boolean
extra: boolean
guidebooks: boolean
+ unlimited: boolean
}
// Full RaidGroup (from :full view, includes raids)
@@ -65,6 +66,7 @@ export interface CreateRaidGroupInput {
hl: boolean
extra: boolean
guidebooks: boolean
+ unlimited: boolean
}
export interface UpdateRaidGroupInput {
@@ -76,6 +78,7 @@ export interface UpdateRaidGroupInput {
hl?: boolean
extra?: boolean
guidebooks?: boolean
+ unlimited?: boolean
}
// Filter types for raid queries
@@ -86,4 +89,5 @@ export interface RaidFilters {
hl?: boolean
extra?: boolean
guidebooks?: boolean
+ unlimited?: boolean
}
diff --git a/src/routes/(app)/database/raid-groups/[id]/+page.svelte b/src/routes/(app)/database/raid-groups/[id]/+page.svelte
index 7f04c507..ae016e93 100644
--- a/src/routes/(app)/database/raid-groups/[id]/+page.svelte
+++ b/src/routes/(app)/database/raid-groups/[id]/+page.svelte
@@ -96,6 +96,9 @@
{group.guidebooks ? 'Yes' : 'No'}
+
+ {group.unlimited ? 'Yes' : 'No'}
+
{#if group.raids && group.raids.length > 0}
diff --git a/src/routes/(app)/database/raid-groups/[id]/edit/+page.svelte b/src/routes/(app)/database/raid-groups/[id]/edit/+page.svelte
index 91bb8809..2b5a32d0 100644
--- a/src/routes/(app)/database/raid-groups/[id]/edit/+page.svelte
+++ b/src/routes/(app)/database/raid-groups/[id]/edit/+page.svelte
@@ -44,7 +44,8 @@
difficulty: 1,
hl: false,
extra: false,
- guidebooks: false
+ guidebooks: false,
+ unlimited: false
})
// Sync edit data when group changes
@@ -58,7 +59,8 @@
difficulty: group.difficulty ?? 1,
hl: group.hl ?? false,
extra: group.extra ?? false,
- guidebooks: group.guidebooks ?? false
+ guidebooks: group.guidebooks ?? false,
+ unlimited: group.unlimited ?? false
}
}
})
@@ -84,7 +86,8 @@
difficulty: editData.difficulty,
hl: editData.hl,
extra: editData.extra,
- guidebooks: editData.guidebooks
+ guidebooks: editData.guidebooks,
+ unlimited: editData.unlimited
})
// Invalidate queries
@@ -181,6 +184,12 @@
editable={true}
type="checkbox"
/>
+
{:else}
diff --git a/src/routes/(app)/database/raid-groups/new/+page.svelte b/src/routes/(app)/database/raid-groups/new/+page.svelte
index ee0a8b27..e9acceca 100644
--- a/src/routes/(app)/database/raid-groups/new/+page.svelte
+++ b/src/routes/(app)/database/raid-groups/new/+page.svelte
@@ -31,7 +31,8 @@
difficulty: 1,
hl: false,
extra: false,
- guidebooks: false
+ guidebooks: false,
+ unlimited: false
})
// Validation
@@ -55,7 +56,8 @@
difficulty: editData.difficulty,
hl: editData.hl,
extra: editData.extra,
- guidebooks: editData.guidebooks
+ guidebooks: editData.guidebooks,
+ unlimited: editData.unlimited
})
// Invalidate queries
@@ -147,6 +149,12 @@
editable={true}
type="checkbox"
/>
+