feat: complete inventory search frontend — weapons, filters, status column

- Add Weapons and Clothing equipment type radio options
- Add Weapon/Combat Stats filter card: damage, attack bonus, crit resist, tinks
- Add Item Properties filter card: material, level req, workmanship, value, burden
- Add Item State filter card: spell text search, bonded, attuned, rare checkboxes
- Add Status column (Equipped/Inventory) to results table
- Remove dead Slot View button and section (no JS handlers existed)
- Update clearAllFields() for all new inputs
- All changes frontend-only — suitbuilder and backend API untouched

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-04-08 17:10:35 +02:00
parent 8432c5f7c3
commit 5b26a19666
2 changed files with 126 additions and 18 deletions

View file

@ -538,6 +538,14 @@
<input type="radio" name="equipmentType" id="pantsOnly" value="pants" style="margin-right: 3px;">
Pants Only
</label>
<label style="display: flex; align-items: center; font-weight: normal;">
<input type="radio" name="equipmentType" id="weaponOnly" value="weapon" style="margin-right: 3px;">
Weapons
</label>
<label style="display: flex; align-items: center; font-weight: normal;">
<input type="radio" name="equipmentType" id="clothingOnly" value="clothing" style="margin-right: 3px;">
Clothing
</label>
<label style="display: flex; align-items: center; font-weight: normal;">
<input type="radio" name="equipmentType" id="allItems" value="all" style="margin-right: 3px;">
All Items
@ -624,6 +632,89 @@
</div>
</div>
<!-- Weapon / Combat Stats -->
<div class="filter-card">
<div class="filter-card-header">Weapon / Combat Stats</div>
<div class="filter-row">
<div class="filter-group">
<label>Damage:</label>
<input type="number" id="searchMinDamage" placeholder="Min">
<span class="range-separator">-</span>
<input type="number" id="searchMaxDamage" placeholder="Max">
</div>
<div class="filter-group">
<label>Attack Bonus:</label>
<input type="number" id="searchMinAttackBonus" placeholder="Min" step="0.01">
</div>
<div class="filter-group">
<label>Crit Resist:</label>
<input type="number" id="searchMinCritResistRating" placeholder="Min">
</div>
<div class="filter-group">
<label>Tinks:</label>
<input type="number" id="searchMinTinks" placeholder="Min">
</div>
</div>
</div>
<!-- Item Properties -->
<div class="filter-card">
<div class="filter-card-header">Item Properties</div>
<div class="filter-row">
<div class="filter-group">
<label>Material:</label>
<input type="text" id="searchMaterial" placeholder="e.g. Gold" style="width: 80px;">
</div>
<div class="filter-group">
<label>Level Req:</label>
<input type="number" id="searchMinLevel" placeholder="Min">
<span class="range-separator">-</span>
<input type="number" id="searchMaxLevel" placeholder="Max">
</div>
<div class="filter-group">
<label>Workmanship:</label>
<input type="number" id="searchMinWorkmanship" placeholder="Min" step="0.5">
<span class="range-separator">-</span>
<input type="number" id="searchMaxWorkmanship" placeholder="Max" step="0.5">
</div>
</div>
<div class="filter-row">
<div class="filter-group">
<label>Value:</label>
<input type="number" id="searchMinValue" placeholder="Min">
<span class="range-separator">-</span>
<input type="number" id="searchMaxValue" placeholder="Max">
</div>
<div class="filter-group">
<label>Max Burden:</label>
<input type="number" id="searchMaxBurden" placeholder="Max">
</div>
</div>
</div>
<!-- Item State & Spell Search -->
<div class="filter-card">
<div class="filter-card-header">Item State &amp; Spell Search</div>
<div class="filter-row">
<div class="filter-group">
<label>Spell Search:</label>
<input type="text" id="searchSpellContains" placeholder="Spell name contains..." style="width: 150px;">
</div>
<div class="filter-group">
<label style="min-width: auto;">Bonded:</label>
<input type="checkbox" id="searchBonded" style="width: auto; height: auto;">
</div>
<div class="filter-group">
<label style="min-width: auto;">Attuned:</label>
<input type="checkbox" id="searchAttuned" style="width: auto; height: auto;">
</div>
<div class="filter-group">
<label style="min-width: auto;">Rare:</label>
<input type="checkbox" id="searchIsRare" style="width: auto; height: auto;">
</div>
</div>
</div>
<!-- Checkbox Sections in Grid Layout -->
<div class="checkbox-sections-container">
<!-- Equipment Sets -->
@ -985,7 +1076,6 @@
<button type="button" class="btn btn-secondary" id="clearBtn">Clear All</button>
<button type="submit" class="btn btn-primary">Search Items</button>
<button type="button" class="btn btn-secondary" id="setAnalysisBtn">Analyze Sets</button>
<button type="button" class="btn btn-secondary" id="slotViewBtn">Slot View</button>
</div>
</form>
@ -1034,21 +1124,6 @@
</div>
</div>
<!-- Slot View Section -->
<div class="slot-view-section" id="slotViewSection" style="display: none;">
<div class="slot-view-header">
<h3>Equipment Slot View</h3>
<div class="filter-row">
<button type="button" class="btn btn-primary" id="loadSlotView">Load Items</button>
<button type="button" class="btn btn-secondary" id="backToSearchFromSlots">Back to Search</button>
</div>
</div>
<div class="slots-grid" id="slotsGrid">
<!-- Slots will be populated by JavaScript -->
</div>
</div>
<div class="results-container" id="searchResults">
<div class="no-results">Enter search criteria above and click "Search Items" to find inventory items.</div>
</div>