remove suggestion props from section components

This commit is contained in:
Justin Edmund 2026-01-04 00:15:32 -08:00
parent 2b22d539eb
commit 5b62a0b62e
14 changed files with 48 additions and 348 deletions

View file

@ -1,10 +1,8 @@
<svelte:options runes={true} /> <svelte:options runes={true} />
<script lang="ts"> <script lang="ts">
import type { CharacterSuggestions } from '$lib/api/adapters/entity.adapter'
import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte' import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte'
import DetailItem from '$lib/components/ui/DetailItem.svelte' import DetailItem from '$lib/components/ui/DetailItem.svelte'
import SuggestionDetailItem from '$lib/components/ui/SuggestionDetailItem.svelte'
import CopyableText from '$lib/components/ui/CopyableText.svelte' import CopyableText from '$lib/components/ui/CopyableText.svelte'
import Select from '$lib/components/ui/Select.svelte' import Select from '$lib/components/ui/Select.svelte'
import MultiSelect from '$lib/components/ui/MultiSelect.svelte' import MultiSelect from '$lib/components/ui/MultiSelect.svelte'
@ -16,21 +14,12 @@
character: any character: any
editMode?: boolean editMode?: boolean
editData?: any editData?: any
// Suggestion support for batch import
suggestions?: CharacterSuggestions
dismissedSuggestions?: Set<string>
onAcceptSuggestion?: (field: string, value: any) => void
onDismissSuggestion?: (field: string) => void
} }
let { let {
character, character,
editMode = false, editMode = false,
editData = $bindable(), editData = $bindable()
suggestions,
dismissedSuggestions,
onAcceptSuggestion,
onDismissSuggestion
}: Props = $props() }: Props = $props()
const rarityOptions = getRarityOptions() const rarityOptions = getRarityOptions()
@ -92,16 +81,12 @@
type="text" type="text"
placeholder="日本語名" placeholder="日本語名"
/> />
<SuggestionDetailItem <DetailItem
label="Rarity" label="Rarity"
bind:value={editData.rarity} bind:value={editData.rarity}
editable={true} editable={true}
type="select" type="select"
options={rarityOptions} options={rarityOptions}
suggestion={suggestions?.rarity}
dismissedSuggestion={dismissedSuggestions?.has('rarity')}
onAcceptSuggestion={() => onAcceptSuggestion?.('rarity', suggestions?.rarity)}
onDismissSuggestion={() => onDismissSuggestion?.('rarity')}
/> />
<DetailItem <DetailItem
label="Granblue ID" label="Granblue ID"

View file

@ -1,30 +1,19 @@
<svelte:options runes={true} /> <svelte:options runes={true} />
<script lang="ts"> <script lang="ts">
import type { CharacterSuggestions } from '$lib/api/adapters/entity.adapter'
import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte' import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte'
import DetailItem from '$lib/components/ui/DetailItem.svelte' import DetailItem from '$lib/components/ui/DetailItem.svelte'
import SuggestionDetailItem from '$lib/components/ui/SuggestionDetailItem.svelte'
interface Props { interface Props {
character: any character: any
editMode?: boolean editMode?: boolean
editData?: any editData?: any
// Suggestion support for batch import
suggestions?: CharacterSuggestions
dismissedSuggestions?: Set<string>
onAcceptSuggestion?: (field: string, value: any) => void
onDismissSuggestion?: (field: string) => void
} }
let { let {
character, character,
editMode = false, editMode = false,
editData = $bindable(), editData = $bindable()
suggestions,
dismissedSuggestions,
onAcceptSuggestion,
onDismissSuggestion
}: Props = $props() }: Props = $props()
const flb = $derived(editMode ? Boolean(editData.flb) : Boolean(character?.uncap?.flb)) const flb = $derived(editMode ? Boolean(editData.flb) : Boolean(character?.uncap?.flb))
@ -33,39 +22,27 @@
<DetailsContainer title="HP Stats"> <DetailsContainer title="HP Stats">
{#if editMode} {#if editMode}
<SuggestionDetailItem <DetailItem
label="Base HP" label="Base HP"
bind:value={editData.minHp} bind:value={editData.minHp}
editable={true} editable={true}
type="number" type="number"
placeholder="0" placeholder="0"
suggestion={suggestions?.minHp}
dismissedSuggestion={dismissedSuggestions?.has('minHp')}
onAcceptSuggestion={() => onAcceptSuggestion?.('minHp', suggestions?.minHp)}
onDismissSuggestion={() => onDismissSuggestion?.('minHp')}
/> />
<SuggestionDetailItem <DetailItem
label="Max HP" label="Max HP"
bind:value={editData.maxHp} bind:value={editData.maxHp}
editable={true} editable={true}
type="number" type="number"
placeholder="0" placeholder="0"
suggestion={suggestions?.maxHp}
dismissedSuggestion={dismissedSuggestions?.has('maxHp')}
onAcceptSuggestion={() => onAcceptSuggestion?.('maxHp', suggestions?.maxHp)}
onDismissSuggestion={() => onDismissSuggestion?.('maxHp')}
/> />
{#if flb} {#if flb}
<SuggestionDetailItem <DetailItem
label="Max HP (FLB)" label="Max HP (FLB)"
bind:value={editData.maxHpFlb} bind:value={editData.maxHpFlb}
editable={true} editable={true}
type="number" type="number"
placeholder="0" placeholder="0"
suggestion={suggestions?.maxHpFlb}
dismissedSuggestion={dismissedSuggestions?.has('maxHpFlb')}
onAcceptSuggestion={() => onAcceptSuggestion?.('maxHpFlb', suggestions?.maxHpFlb)}
onDismissSuggestion={() => onDismissSuggestion?.('maxHpFlb')}
/> />
{/if} {/if}
{#if ulb} {#if ulb}
@ -85,39 +62,27 @@
<DetailsContainer title="Attack Stats"> <DetailsContainer title="Attack Stats">
{#if editMode} {#if editMode}
<SuggestionDetailItem <DetailItem
label="Base Attack" label="Base Attack"
bind:value={editData.minAtk} bind:value={editData.minAtk}
editable={true} editable={true}
type="number" type="number"
placeholder="0" placeholder="0"
suggestion={suggestions?.minAtk}
dismissedSuggestion={dismissedSuggestions?.has('minAtk')}
onAcceptSuggestion={() => onAcceptSuggestion?.('minAtk', suggestions?.minAtk)}
onDismissSuggestion={() => onDismissSuggestion?.('minAtk')}
/> />
<SuggestionDetailItem <DetailItem
label="Max Attack" label="Max Attack"
bind:value={editData.maxAtk} bind:value={editData.maxAtk}
editable={true} editable={true}
type="number" type="number"
placeholder="0" placeholder="0"
suggestion={suggestions?.maxAtk}
dismissedSuggestion={dismissedSuggestions?.has('maxAtk')}
onAcceptSuggestion={() => onAcceptSuggestion?.('maxAtk', suggestions?.maxAtk)}
onDismissSuggestion={() => onDismissSuggestion?.('maxAtk')}
/> />
{#if flb} {#if flb}
<SuggestionDetailItem <DetailItem
label="Max Attack (FLB)" label="Max Attack (FLB)"
bind:value={editData.maxAtkFlb} bind:value={editData.maxAtkFlb}
editable={true} editable={true}
type="number" type="number"
placeholder="0" placeholder="0"
suggestion={suggestions?.maxAtkFlb}
dismissedSuggestion={dismissedSuggestions?.has('maxAtkFlb')}
onAcceptSuggestion={() => onAcceptSuggestion?.('maxAtkFlb', suggestions?.maxAtkFlb)}
onDismissSuggestion={() => onDismissSuggestion?.('maxAtkFlb')}
/> />
{/if} {/if}
{#if ulb} {#if ulb}

View file

@ -1,10 +1,8 @@
<svelte:options runes={true} /> <svelte:options runes={true} />
<script lang="ts"> <script lang="ts">
import type { CharacterSuggestions } from '$lib/api/adapters/entity.adapter'
import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte' import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte'
import DetailItem from '$lib/components/ui/DetailItem.svelte' import DetailItem from '$lib/components/ui/DetailItem.svelte'
import SuggestionDetailItem from '$lib/components/ui/SuggestionDetailItem.svelte'
import ElementLabel from '$lib/components/labels/ElementLabel.svelte' import ElementLabel from '$lib/components/labels/ElementLabel.svelte'
import ProficiencyLabel from '$lib/components/labels/ProficiencyLabel.svelte' import ProficiencyLabel from '$lib/components/labels/ProficiencyLabel.svelte'
import { getElementOptions } from '$lib/utils/element' import { getElementOptions } from '$lib/utils/element'
@ -16,21 +14,12 @@
character: any character: any
editMode?: boolean editMode?: boolean
editData?: any editData?: any
// Suggestion support for batch import
suggestions?: CharacterSuggestions
dismissedSuggestions?: Set<string>
onAcceptSuggestion?: (field: string, value: any) => void
onDismissSuggestion?: (field: string) => void
} }
let { let {
character, character,
editMode = false, editMode = false,
editData = $bindable(), editData = $bindable()
suggestions,
dismissedSuggestions,
onAcceptSuggestion,
onDismissSuggestion
}: Props = $props() }: Props = $props()
const elementOptions = getElementOptions() const elementOptions = getElementOptions()
@ -41,71 +30,47 @@
<DetailsContainer title="Details"> <DetailsContainer title="Details">
{#if editMode} {#if editMode}
<SuggestionDetailItem <DetailItem
label="Element" label="Element"
bind:value={editData.element} bind:value={editData.element}
editable={true} editable={true}
type="select" type="select"
options={elementOptions} options={elementOptions}
suggestion={suggestions?.element}
dismissedSuggestion={dismissedSuggestions?.has('element')}
onAcceptSuggestion={() => onAcceptSuggestion?.('element', suggestions?.element)}
onDismissSuggestion={() => onDismissSuggestion?.('element')}
/> />
<SuggestionDetailItem <DetailItem
label="Race 1" label="Race 1"
bind:value={editData.race1} bind:value={editData.race1}
editable={true} editable={true}
type="select" type="select"
options={raceOptions} options={raceOptions}
suggestion={suggestions?.race1}
dismissedSuggestion={dismissedSuggestions?.has('race1')}
onAcceptSuggestion={() => onAcceptSuggestion?.('race1', suggestions?.race1)}
onDismissSuggestion={() => onDismissSuggestion?.('race1')}
/> />
<SuggestionDetailItem <DetailItem
label="Race 2" label="Race 2"
bind:value={editData.race2} bind:value={editData.race2}
editable={true} editable={true}
type="select" type="select"
options={raceOptions} options={raceOptions}
suggestion={suggestions?.race2}
dismissedSuggestion={dismissedSuggestions?.has('race2')}
onAcceptSuggestion={() => onAcceptSuggestion?.('race2', suggestions?.race2)}
onDismissSuggestion={() => onDismissSuggestion?.('race2')}
/> />
<SuggestionDetailItem <DetailItem
label="Gender" label="Gender"
bind:value={editData.gender} bind:value={editData.gender}
editable={true} editable={true}
type="select" type="select"
options={genderOptions} options={genderOptions}
suggestion={suggestions?.gender}
dismissedSuggestion={dismissedSuggestions?.has('gender')}
onAcceptSuggestion={() => onAcceptSuggestion?.('gender', suggestions?.gender)}
onDismissSuggestion={() => onDismissSuggestion?.('gender')}
/> />
<SuggestionDetailItem <DetailItem
label="Proficiency 1" label="Proficiency 1"
bind:value={editData.proficiency1} bind:value={editData.proficiency1}
editable={true} editable={true}
type="select" type="select"
options={proficiencyOptions} options={proficiencyOptions}
suggestion={suggestions?.proficiency1}
dismissedSuggestion={dismissedSuggestions?.has('proficiency1')}
onAcceptSuggestion={() => onAcceptSuggestion?.('proficiency1', suggestions?.proficiency1)}
onDismissSuggestion={() => onDismissSuggestion?.('proficiency1')}
/> />
<SuggestionDetailItem <DetailItem
label="Proficiency 2" label="Proficiency 2"
bind:value={editData.proficiency2} bind:value={editData.proficiency2}
editable={true} editable={true}
type="select" type="select"
options={proficiencyOptions} options={proficiencyOptions}
suggestion={suggestions?.proficiency2}
dismissedSuggestion={dismissedSuggestions?.has('proficiency2')}
onAcceptSuggestion={() => onAcceptSuggestion?.('proficiency2', suggestions?.proficiency2)}
onDismissSuggestion={() => onDismissSuggestion?.('proficiency2')}
/> />
{:else} {:else}
<DetailItem label="Element"> <DetailItem label="Element">

View file

@ -1,10 +1,8 @@
<svelte:options runes={true} /> <svelte:options runes={true} />
<script lang="ts"> <script lang="ts">
import type { CharacterSuggestions } from '$lib/api/adapters/entity.adapter'
import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte' import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte'
import DetailItem from '$lib/components/ui/DetailItem.svelte' import DetailItem from '$lib/components/ui/DetailItem.svelte'
import SuggestionDetailItem from '$lib/components/ui/SuggestionDetailItem.svelte'
import UncapIndicator from '$lib/components/uncap/UncapIndicator.svelte' import UncapIndicator from '$lib/components/uncap/UncapIndicator.svelte'
import { getCharacterMaxUncapLevel } from '$lib/utils/uncap' import { getCharacterMaxUncapLevel } from '$lib/utils/uncap'
import { getElementLabel } from '$lib/utils/element' import { getElementLabel } from '$lib/utils/element'
@ -15,11 +13,6 @@
character: any character: any
editMode?: boolean editMode?: boolean
editData?: any editData?: any
// Suggestion support for batch import
suggestions?: CharacterSuggestions
dismissedSuggestions?: Set<string>
onAcceptSuggestion?: (field: string, value: any) => void
onDismissSuggestion?: (field: string) => void
// Callback when editData is modified (for triggering reactivity in parent) // Callback when editData is modified (for triggering reactivity in parent)
onDataChange?: () => void onDataChange?: () => void
} }
@ -28,10 +21,6 @@
character, character,
editMode = false, editMode = false,
editData = $bindable(), editData = $bindable(),
suggestions,
dismissedSuggestions,
onAcceptSuggestion,
onDismissSuggestion,
onDataChange onDataChange
}: Props = $props() }: Props = $props()
@ -115,29 +104,21 @@
<DetailItem label="Transcendence" value={transcendence ? 'Yes' : 'No'} /> <DetailItem label="Transcendence" value={transcendence ? 'Yes' : 'No'} />
<DetailItem label="Special" value={special ? 'Yes' : 'No'} /> <DetailItem label="Special" value={special ? 'Yes' : 'No'} />
{:else} {:else}
<SuggestionDetailItem <DetailItem
label="FLB" label="FLB"
bind:value={editData.flb} bind:value={editData.flb}
editable={true} editable={true}
type="checkbox" type="checkbox"
element={elementName} element={elementName}
onchange={handleFlbChange} onchange={handleFlbChange}
suggestion={suggestions?.flb}
dismissedSuggestion={dismissedSuggestions?.has('flb')}
onAcceptSuggestion={() => onAcceptSuggestion?.('flb', suggestions?.flb)}
onDismissSuggestion={() => onDismissSuggestion?.('flb')}
/> />
<SuggestionDetailItem <DetailItem
label="ULB" label="ULB"
bind:value={editData.ulb} bind:value={editData.ulb}
editable={true} editable={true}
type="checkbox" type="checkbox"
element={elementName} element={elementName}
onchange={handleUlbChange} onchange={handleUlbChange}
suggestion={suggestions?.ulb}
dismissedSuggestion={dismissedSuggestions?.has('ulb')}
onAcceptSuggestion={() => onAcceptSuggestion?.('ulb', suggestions?.ulb)}
onDismissSuggestion={() => onDismissSuggestion?.('ulb')}
/> />
<DetailItem <DetailItem
label="Transcendence" label="Transcendence"

View file

@ -1,7 +1,6 @@
<svelte:options runes={true} /> <svelte:options runes={true} />
<script lang="ts"> <script lang="ts">
import type { SummonSuggestions } from '$lib/api/adapters/entity.adapter'
import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte' import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte'
import DetailItem from '$lib/components/ui/DetailItem.svelte' import DetailItem from '$lib/components/ui/DetailItem.svelte'
import MultiSelect from '$lib/components/ui/MultiSelect.svelte' import MultiSelect from '$lib/components/ui/MultiSelect.svelte'
@ -11,21 +10,12 @@
summon: any summon: any
editMode?: boolean editMode?: boolean
editData?: any editData?: any
// Suggestion support for batch import
suggestions?: SummonSuggestions
dismissedSuggestions?: Set<string>
onAcceptSuggestion?: (field: string, value: any) => void
onDismissSuggestion?: (field: string) => void
} }
let { let {
summon, summon,
editMode = false, editMode = false,
editData = $bindable(), editData = $bindable()
suggestions,
dismissedSuggestions,
onAcceptSuggestion,
onDismissSuggestion
}: Props = $props() }: Props = $props()
// Promotion options for multiselect // Promotion options for multiselect

View file

@ -1,10 +1,8 @@
<svelte:options runes={true} /> <svelte:options runes={true} />
<script lang="ts"> <script lang="ts">
import type { SummonSuggestions } from '$lib/api/adapters/entity.adapter'
import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte' import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte'
import DetailItem from '$lib/components/ui/DetailItem.svelte' import DetailItem from '$lib/components/ui/DetailItem.svelte'
import SuggestionDetailItem from '$lib/components/ui/SuggestionDetailItem.svelte'
import CopyableText from '$lib/components/ui/CopyableText.svelte' import CopyableText from '$lib/components/ui/CopyableText.svelte'
import { getRarityLabel, getRarityOptions } from '$lib/utils/rarity' import { getRarityLabel, getRarityOptions } from '$lib/utils/rarity'
@ -12,21 +10,12 @@
summon: any summon: any
editMode?: boolean editMode?: boolean
editData?: any editData?: any
// Suggestion support for batch import
suggestions?: SummonSuggestions
dismissedSuggestions?: Set<string>
onAcceptSuggestion?: (field: string, value: any) => void
onDismissSuggestion?: (field: string) => void
} }
let { let {
summon, summon,
editMode = false, editMode = false,
editData = $bindable<any>(), editData = $bindable<any>()
suggestions,
dismissedSuggestions,
onAcceptSuggestion,
onDismissSuggestion
}: Props = $props() }: Props = $props()
const rarityOptions = getRarityOptions() const rarityOptions = getRarityOptions()
@ -48,16 +37,12 @@
type="text" type="text"
placeholder="日本語名" placeholder="日本語名"
/> />
<SuggestionDetailItem <DetailItem
label="Rarity" label="Rarity"
bind:value={editData.rarity} bind:value={editData.rarity}
editable={true} editable={true}
type="select" type="select"
options={rarityOptions} options={rarityOptions}
suggestion={suggestions?.rarity}
dismissedSuggestion={dismissedSuggestions?.has('rarity')}
onAcceptSuggestion={() => onAcceptSuggestion?.('rarity', suggestions?.rarity)}
onDismissSuggestion={() => onDismissSuggestion?.('rarity')}
/> />
<DetailItem <DetailItem
label="Granblue ID" label="Granblue ID"

View file

@ -1,30 +1,19 @@
<svelte:options runes={true} /> <svelte:options runes={true} />
<script lang="ts"> <script lang="ts">
import type { SummonSuggestions } from '$lib/api/adapters/entity.adapter'
import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte' import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte'
import DetailItem from '$lib/components/ui/DetailItem.svelte' import DetailItem from '$lib/components/ui/DetailItem.svelte'
import SuggestionDetailItem from '$lib/components/ui/SuggestionDetailItem.svelte'
interface Props { interface Props {
summon: any summon: any
editMode?: boolean editMode?: boolean
editData?: any editData?: any
// Suggestion support for batch import
suggestions?: SummonSuggestions
dismissedSuggestions?: Set<string>
onAcceptSuggestion?: (field: string, value: any) => void
onDismissSuggestion?: (field: string) => void
} }
let { let {
summon, summon,
editMode = false, editMode = false,
editData = $bindable(), editData = $bindable()
suggestions,
dismissedSuggestions,
onAcceptSuggestion,
onDismissSuggestion
}: Props = $props() }: Props = $props()
const flb = $derived(editMode ? Boolean(editData.flb) : Boolean(summon?.uncap?.flb)) const flb = $derived(editMode ? Boolean(editData.flb) : Boolean(summon?.uncap?.flb))
@ -52,39 +41,27 @@
<DetailsContainer title="HP Stats"> <DetailsContainer title="HP Stats">
{#if editMode} {#if editMode}
<SuggestionDetailItem <DetailItem
label="Base HP" label="Base HP"
bind:value={editData.minHp} bind:value={editData.minHp}
editable={true} editable={true}
type="number" type="number"
placeholder="0" placeholder="0"
suggestion={suggestions?.minHp}
dismissedSuggestion={dismissedSuggestions?.has('minHp')}
onAcceptSuggestion={() => onAcceptSuggestion?.('minHp', suggestions?.minHp)}
onDismissSuggestion={() => onDismissSuggestion?.('minHp')}
/> />
<SuggestionDetailItem <DetailItem
label="Max HP" label="Max HP"
bind:value={editData.maxHp} bind:value={editData.maxHp}
editable={true} editable={true}
type="number" type="number"
placeholder="0" placeholder="0"
suggestion={suggestions?.maxHp}
dismissedSuggestion={dismissedSuggestions?.has('maxHp')}
onAcceptSuggestion={() => onAcceptSuggestion?.('maxHp', suggestions?.maxHp)}
onDismissSuggestion={() => onDismissSuggestion?.('maxHp')}
/> />
{#if flb} {#if flb}
<SuggestionDetailItem <DetailItem
label="Max HP (FLB)" label="Max HP (FLB)"
bind:value={editData.maxHpFlb} bind:value={editData.maxHpFlb}
editable={true} editable={true}
type="number" type="number"
placeholder="0" placeholder="0"
suggestion={suggestions?.maxHpFlb}
dismissedSuggestion={dismissedSuggestions?.has('maxHpFlb')}
onAcceptSuggestion={() => onAcceptSuggestion?.('maxHpFlb', suggestions?.maxHpFlb)}
onDismissSuggestion={() => onDismissSuggestion?.('maxHpFlb')}
/> />
{/if} {/if}
{#if ulb} {#if ulb}
@ -122,39 +99,27 @@
<DetailsContainer title="Attack Stats"> <DetailsContainer title="Attack Stats">
{#if editMode} {#if editMode}
<SuggestionDetailItem <DetailItem
label="Base Attack" label="Base Attack"
bind:value={editData.minAtk} bind:value={editData.minAtk}
editable={true} editable={true}
type="number" type="number"
placeholder="0" placeholder="0"
suggestion={suggestions?.minAtk}
dismissedSuggestion={dismissedSuggestions?.has('minAtk')}
onAcceptSuggestion={() => onAcceptSuggestion?.('minAtk', suggestions?.minAtk)}
onDismissSuggestion={() => onDismissSuggestion?.('minAtk')}
/> />
<SuggestionDetailItem <DetailItem
label="Max Attack" label="Max Attack"
bind:value={editData.maxAtk} bind:value={editData.maxAtk}
editable={true} editable={true}
type="number" type="number"
placeholder="0" placeholder="0"
suggestion={suggestions?.maxAtk}
dismissedSuggestion={dismissedSuggestions?.has('maxAtk')}
onAcceptSuggestion={() => onAcceptSuggestion?.('maxAtk', suggestions?.maxAtk)}
onDismissSuggestion={() => onDismissSuggestion?.('maxAtk')}
/> />
{#if flb} {#if flb}
<SuggestionDetailItem <DetailItem
label="Max Attack (FLB)" label="Max Attack (FLB)"
bind:value={editData.maxAtkFlb} bind:value={editData.maxAtkFlb}
editable={true} editable={true}
type="number" type="number"
placeholder="0" placeholder="0"
suggestion={suggestions?.maxAtkFlb}
dismissedSuggestion={dismissedSuggestions?.has('maxAtkFlb')}
onAcceptSuggestion={() => onAcceptSuggestion?.('maxAtkFlb', suggestions?.maxAtkFlb)}
onDismissSuggestion={() => onDismissSuggestion?.('maxAtkFlb')}
/> />
{/if} {/if}
{#if ulb} {#if ulb}

View file

@ -2,11 +2,9 @@
<script lang="ts"> <script lang="ts">
import { createQuery } from '@tanstack/svelte-query' import { createQuery } from '@tanstack/svelte-query'
import type { SummonSuggestions } from '$lib/api/adapters/entity.adapter'
import { entityQueries } from '$lib/api/queries/entity.queries' import { entityQueries } from '$lib/api/queries/entity.queries'
import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte' import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte'
import DetailItem from '$lib/components/ui/DetailItem.svelte' import DetailItem from '$lib/components/ui/DetailItem.svelte'
import SuggestionDetailItem from '$lib/components/ui/SuggestionDetailItem.svelte'
import ElementLabel from '$lib/components/labels/ElementLabel.svelte' import ElementLabel from '$lib/components/labels/ElementLabel.svelte'
import { getElementLabel, getElementOptions } from '$lib/utils/element' import { getElementLabel, getElementOptions } from '$lib/utils/element'
import type { SummonSeriesRef } from '$lib/types/api/summonSeries' import type { SummonSeriesRef } from '$lib/types/api/summonSeries'
@ -17,21 +15,12 @@
summon: any summon: any
editMode?: boolean editMode?: boolean
editData?: any editData?: any
// Suggestion support for batch import
suggestions?: SummonSuggestions
dismissedSuggestions?: Set<string>
onAcceptSuggestion?: (field: string, value: any) => void
onDismissSuggestion?: (field: string) => void
} }
let { let {
summon, summon,
editMode = false, editMode = false,
editData = $bindable(), editData = $bindable()
suggestions,
dismissedSuggestions,
onAcceptSuggestion,
onDismissSuggestion
}: Props = $props() }: Props = $props()
// Fetch summon series list from API // Fetch summon series list from API
@ -67,16 +56,12 @@
<DetailsContainer title="Details"> <DetailsContainer title="Details">
{#if editMode} {#if editMode}
<SuggestionDetailItem <DetailItem
label="Element" label="Element"
bind:value={editData.element} bind:value={editData.element}
editable={true} editable={true}
type="select" type="select"
options={elementOptions} options={elementOptions}
suggestion={suggestions?.element}
dismissedSuggestion={dismissedSuggestions?.has('element')}
onAcceptSuggestion={() => onAcceptSuggestion?.('element', suggestions?.element)}
onDismissSuggestion={() => onDismissSuggestion?.('element')}
/> />
<DetailItem <DetailItem
label="Series" label="Series"

View file

@ -1,10 +1,8 @@
<svelte:options runes={true} /> <svelte:options runes={true} />
<script lang="ts"> <script lang="ts">
import type { SummonSuggestions } from '$lib/api/adapters/entity.adapter'
import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte' import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte'
import DetailItem from '$lib/components/ui/DetailItem.svelte' import DetailItem from '$lib/components/ui/DetailItem.svelte'
import SuggestionDetailItem from '$lib/components/ui/SuggestionDetailItem.svelte'
import UncapIndicator from '$lib/components/uncap/UncapIndicator.svelte' import UncapIndicator from '$lib/components/uncap/UncapIndicator.svelte'
import { getSummonMaxUncapLevel } from '$lib/utils/uncap' import { getSummonMaxUncapLevel } from '$lib/utils/uncap'
import { getElementLabel } from '$lib/utils/element' import { getElementLabel } from '$lib/utils/element'
@ -15,11 +13,6 @@
summon: any summon: any
editMode?: boolean editMode?: boolean
editData?: any editData?: any
// Suggestion support for batch import
suggestions?: SummonSuggestions
dismissedSuggestions?: Set<string>
onAcceptSuggestion?: (field: string, value: any) => void
onDismissSuggestion?: (field: string) => void
// Callback when editData is modified (for triggering reactivity in parent) // Callback when editData is modified (for triggering reactivity in parent)
onDataChange?: () => void onDataChange?: () => void
} }
@ -28,10 +21,6 @@
summon, summon,
editMode = false, editMode = false,
editData = $bindable(), editData = $bindable(),
suggestions,
dismissedSuggestions,
onAcceptSuggestion,
onDismissSuggestion,
onDataChange onDataChange
}: Props = $props() }: Props = $props()
@ -101,29 +90,21 @@
{/if} {/if}
{#if editMode} {#if editMode}
<SuggestionDetailItem <DetailItem
label="FLB" label="FLB"
bind:value={editData.flb} bind:value={editData.flb}
editable={true} editable={true}
type="checkbox" type="checkbox"
element={elementName} element={elementName}
onchange={handleFlbChange} onchange={handleFlbChange}
suggestion={suggestions?.flb}
dismissedSuggestion={dismissedSuggestions?.has('flb')}
onAcceptSuggestion={() => onAcceptSuggestion?.('flb', suggestions?.flb)}
onDismissSuggestion={() => onDismissSuggestion?.('flb')}
/> />
<SuggestionDetailItem <DetailItem
label="ULB" label="ULB"
bind:value={editData.ulb} bind:value={editData.ulb}
editable={true} editable={true}
type="checkbox" type="checkbox"
element={elementName} element={elementName}
onchange={handleUlbChange} onchange={handleUlbChange}
suggestion={suggestions?.ulb}
dismissedSuggestion={dismissedSuggestions?.has('ulb')}
onAcceptSuggestion={() => onAcceptSuggestion?.('ulb', suggestions?.ulb)}
onDismissSuggestion={() => onDismissSuggestion?.('ulb')}
/> />
<DetailItem <DetailItem
label="Transcendence" label="Transcendence"
@ -133,16 +114,12 @@
element={elementName} element={elementName}
onchange={handleTranscendenceChange} onchange={handleTranscendenceChange}
/> />
<SuggestionDetailItem <DetailItem
label="Subaura" label="Subaura"
bind:value={editData.subaura} bind:value={editData.subaura}
editable={true} editable={true}
type="checkbox" type="checkbox"
element={elementName} element={elementName}
suggestion={suggestions?.subaura}
dismissedSuggestion={dismissedSuggestions?.has('subaura')}
onAcceptSuggestion={() => onAcceptSuggestion?.('subaura', suggestions?.subaura)}
onDismissSuggestion={() => onDismissSuggestion?.('subaura')}
/> />
<DetailItem <DetailItem
label="Limit" label="Limit"

View file

@ -1,7 +1,6 @@
<svelte:options runes={true} /> <svelte:options runes={true} />
<script lang="ts"> <script lang="ts">
import type { WeaponSuggestions } from '$lib/api/adapters/entity.adapter'
import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte' import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte'
import DetailItem from '$lib/components/ui/DetailItem.svelte' import DetailItem from '$lib/components/ui/DetailItem.svelte'
import MultiSelect from '$lib/components/ui/MultiSelect.svelte' import MultiSelect from '$lib/components/ui/MultiSelect.svelte'
@ -13,21 +12,12 @@
weapon: any weapon: any
editMode?: boolean editMode?: boolean
editData?: any editData?: any
// Suggestion support for batch import
suggestions?: WeaponSuggestions
dismissedSuggestions?: Set<string>
onAcceptSuggestion?: (field: string, value: any) => void
onDismissSuggestion?: (field: string) => void
} }
let { let {
weapon, weapon,
editMode = false, editMode = false,
editData = $bindable(), editData = $bindable()
suggestions,
dismissedSuggestions,
onAcceptSuggestion,
onDismissSuggestion
}: Props = $props() }: Props = $props()
// Promotion options for multiselect // Promotion options for multiselect

View file

@ -1,10 +1,8 @@
<svelte:options runes={true} /> <svelte:options runes={true} />
<script lang="ts"> <script lang="ts">
import type { WeaponSuggestions } from '$lib/api/adapters/entity.adapter'
import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte' import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte'
import DetailItem from '$lib/components/ui/DetailItem.svelte' import DetailItem from '$lib/components/ui/DetailItem.svelte'
import SuggestionDetailItem from '$lib/components/ui/SuggestionDetailItem.svelte'
import CopyableText from '$lib/components/ui/CopyableText.svelte' import CopyableText from '$lib/components/ui/CopyableText.svelte'
import { getRarityLabel, getRarityOptions } from '$lib/utils/rarity' import { getRarityLabel, getRarityOptions } from '$lib/utils/rarity'
@ -12,21 +10,12 @@
weapon: any weapon: any
editMode?: boolean editMode?: boolean
editData?: any editData?: any
// Suggestion support for batch import
suggestions?: WeaponSuggestions
dismissedSuggestions?: Set<string>
onAcceptSuggestion?: (field: string, value: any) => void
onDismissSuggestion?: (field: string) => void
} }
let { let {
weapon, weapon,
editMode = false, editMode = false,
editData = $bindable<any>(), editData = $bindable<any>()
suggestions,
dismissedSuggestions,
onAcceptSuggestion,
onDismissSuggestion
}: Props = $props() }: Props = $props()
const rarityOptions = getRarityOptions() const rarityOptions = getRarityOptions()
@ -48,16 +37,12 @@
type="text" type="text"
placeholder="日本語名" placeholder="日本語名"
/> />
<SuggestionDetailItem <DetailItem
label="Rarity" label="Rarity"
bind:value={editData.rarity} bind:value={editData.rarity}
editable={true} editable={true}
type="select" type="select"
options={rarityOptions} options={rarityOptions}
suggestion={suggestions?.rarity}
dismissedSuggestion={dismissedSuggestions?.has('rarity')}
onAcceptSuggestion={() => onAcceptSuggestion?.('rarity', suggestions?.rarity)}
onDismissSuggestion={() => onDismissSuggestion?.('rarity')}
/> />
<DetailItem <DetailItem
label="Granblue ID" label="Granblue ID"

View file

@ -1,30 +1,19 @@
<svelte:options runes={true} /> <svelte:options runes={true} />
<script lang="ts"> <script lang="ts">
import type { WeaponSuggestions } from '$lib/api/adapters/entity.adapter'
import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte' import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte'
import DetailItem from '$lib/components/ui/DetailItem.svelte' import DetailItem from '$lib/components/ui/DetailItem.svelte'
import SuggestionDetailItem from '$lib/components/ui/SuggestionDetailItem.svelte'
interface Props { interface Props {
weapon: any weapon: any
editMode?: boolean editMode?: boolean
editData?: any editData?: any
// Suggestion support for batch import
suggestions?: WeaponSuggestions
dismissedSuggestions?: Set<string>
onAcceptSuggestion?: (field: string, value: any) => void
onDismissSuggestion?: (field: string) => void
} }
let { let {
weapon, weapon,
editMode = false, editMode = false,
editData = $bindable(), editData = $bindable()
suggestions,
dismissedSuggestions,
onAcceptSuggestion,
onDismissSuggestion
}: Props = $props() }: Props = $props()
const flb = $derived(editMode ? Boolean(editData.flb) : Boolean(weapon?.uncap?.flb)) const flb = $derived(editMode ? Boolean(editData.flb) : Boolean(weapon?.uncap?.flb))
@ -56,39 +45,27 @@
<DetailsContainer title="HP Stats"> <DetailsContainer title="HP Stats">
{#if editMode} {#if editMode}
<SuggestionDetailItem <DetailItem
label="Base HP" label="Base HP"
bind:value={editData.minHp} bind:value={editData.minHp}
editable={true} editable={true}
type="number" type="number"
placeholder="0" placeholder="0"
suggestion={suggestions?.minHp}
dismissedSuggestion={dismissedSuggestions?.has('minHp')}
onAcceptSuggestion={() => onAcceptSuggestion?.('minHp', suggestions?.minHp)}
onDismissSuggestion={() => onDismissSuggestion?.('minHp')}
/> />
<SuggestionDetailItem <DetailItem
label="Max HP" label="Max HP"
bind:value={editData.maxHp} bind:value={editData.maxHp}
editable={true} editable={true}
type="number" type="number"
placeholder="0" placeholder="0"
suggestion={suggestions?.maxHp}
dismissedSuggestion={dismissedSuggestions?.has('maxHp')}
onAcceptSuggestion={() => onAcceptSuggestion?.('maxHp', suggestions?.maxHp)}
onDismissSuggestion={() => onDismissSuggestion?.('maxHp')}
/> />
{#if flb} {#if flb}
<SuggestionDetailItem <DetailItem
label="Max HP (FLB)" label="Max HP (FLB)"
bind:value={editData.maxHpFlb} bind:value={editData.maxHpFlb}
editable={true} editable={true}
type="number" type="number"
placeholder="0" placeholder="0"
suggestion={suggestions?.maxHpFlb}
dismissedSuggestion={dismissedSuggestions?.has('maxHpFlb')}
onAcceptSuggestion={() => onAcceptSuggestion?.('maxHpFlb', suggestions?.maxHpFlb)}
onDismissSuggestion={() => onDismissSuggestion?.('maxHpFlb')}
/> />
{/if} {/if}
{#if ulb} {#if ulb}
@ -114,39 +91,27 @@
<DetailsContainer title="Attack Stats"> <DetailsContainer title="Attack Stats">
{#if editMode} {#if editMode}
<SuggestionDetailItem <DetailItem
label="Base Attack" label="Base Attack"
bind:value={editData.minAtk} bind:value={editData.minAtk}
editable={true} editable={true}
type="number" type="number"
placeholder="0" placeholder="0"
suggestion={suggestions?.minAtk}
dismissedSuggestion={dismissedSuggestions?.has('minAtk')}
onAcceptSuggestion={() => onAcceptSuggestion?.('minAtk', suggestions?.minAtk)}
onDismissSuggestion={() => onDismissSuggestion?.('minAtk')}
/> />
<SuggestionDetailItem <DetailItem
label="Max Attack" label="Max Attack"
bind:value={editData.maxAtk} bind:value={editData.maxAtk}
editable={true} editable={true}
type="number" type="number"
placeholder="0" placeholder="0"
suggestion={suggestions?.maxAtk}
dismissedSuggestion={dismissedSuggestions?.has('maxAtk')}
onAcceptSuggestion={() => onAcceptSuggestion?.('maxAtk', suggestions?.maxAtk)}
onDismissSuggestion={() => onDismissSuggestion?.('maxAtk')}
/> />
{#if flb} {#if flb}
<SuggestionDetailItem <DetailItem
label="Max Attack (FLB)" label="Max Attack (FLB)"
bind:value={editData.maxAtkFlb} bind:value={editData.maxAtkFlb}
editable={true} editable={true}
type="number" type="number"
placeholder="0" placeholder="0"
suggestion={suggestions?.maxAtkFlb}
dismissedSuggestion={dismissedSuggestions?.has('maxAtkFlb')}
onAcceptSuggestion={() => onAcceptSuggestion?.('maxAtkFlb', suggestions?.maxAtkFlb)}
onDismissSuggestion={() => onDismissSuggestion?.('maxAtkFlb')}
/> />
{/if} {/if}
{#if ulb} {#if ulb}

View file

@ -2,11 +2,9 @@
<script lang="ts"> <script lang="ts">
import { createQuery } from '@tanstack/svelte-query' import { createQuery } from '@tanstack/svelte-query'
import type { WeaponSuggestions } from '$lib/api/adapters/entity.adapter'
import { entityQueries } from '$lib/api/queries/entity.queries' import { entityQueries } from '$lib/api/queries/entity.queries'
import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte' import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte'
import DetailItem from '$lib/components/ui/DetailItem.svelte' import DetailItem from '$lib/components/ui/DetailItem.svelte'
import SuggestionDetailItem from '$lib/components/ui/SuggestionDetailItem.svelte'
import ElementLabel from '$lib/components/labels/ElementLabel.svelte' import ElementLabel from '$lib/components/labels/ElementLabel.svelte'
import ProficiencyLabel from '$lib/components/labels/ProficiencyLabel.svelte' import ProficiencyLabel from '$lib/components/labels/ProficiencyLabel.svelte'
import { getElementLabel, getElementOptions } from '$lib/utils/element' import { getElementLabel, getElementOptions } from '$lib/utils/element'
@ -20,21 +18,12 @@
weapon: any weapon: any
editMode?: boolean editMode?: boolean
editData?: any editData?: any
// Suggestion support for batch import
suggestions?: WeaponSuggestions
dismissedSuggestions?: Set<string>
onAcceptSuggestion?: (field: string, value: any) => void
onDismissSuggestion?: (field: string) => void
} }
let { let {
weapon, weapon,
editMode = false, editMode = false,
editData = $bindable(), editData = $bindable()
suggestions,
dismissedSuggestions,
onAcceptSuggestion,
onDismissSuggestion
}: Props = $props() }: Props = $props()
// Fetch weapon series list from API // Fetch weapon series list from API
@ -72,27 +61,19 @@
<DetailsContainer title="Details"> <DetailsContainer title="Details">
{#if editMode} {#if editMode}
<SuggestionDetailItem <DetailItem
label="Element" label="Element"
bind:value={editData.element} bind:value={editData.element}
editable={true} editable={true}
type="select" type="select"
options={elementOptions} options={elementOptions}
suggestion={suggestions?.element}
dismissedSuggestion={dismissedSuggestions?.has('element')}
onAcceptSuggestion={() => onAcceptSuggestion?.('element', suggestions?.element)}
onDismissSuggestion={() => onDismissSuggestion?.('element')}
/> />
<SuggestionDetailItem <DetailItem
label="Proficiency" label="Proficiency"
bind:value={editData.proficiency} bind:value={editData.proficiency}
editable={true} editable={true}
type="select" type="select"
options={proficiencyOptions} options={proficiencyOptions}
suggestion={suggestions?.proficiency}
dismissedSuggestion={dismissedSuggestions?.has('proficiency')}
onAcceptSuggestion={() => onAcceptSuggestion?.('proficiency', suggestions?.proficiency)}
onDismissSuggestion={() => onDismissSuggestion?.('proficiency')}
/> />
<DetailItem <DetailItem
label="Series" label="Series"

View file

@ -1,10 +1,8 @@
<svelte:options runes={true} /> <svelte:options runes={true} />
<script lang="ts"> <script lang="ts">
import type { WeaponSuggestions } from '$lib/api/adapters/entity.adapter'
import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte' import DetailsContainer from '$lib/components/ui/DetailsContainer.svelte'
import DetailItem from '$lib/components/ui/DetailItem.svelte' import DetailItem from '$lib/components/ui/DetailItem.svelte'
import SuggestionDetailItem from '$lib/components/ui/SuggestionDetailItem.svelte'
import UncapIndicator from '$lib/components/uncap/UncapIndicator.svelte' import UncapIndicator from '$lib/components/uncap/UncapIndicator.svelte'
import { getElementLabel } from '$lib/utils/element' import { getElementLabel } from '$lib/utils/element'
@ -14,11 +12,6 @@
weapon: any weapon: any
editMode?: boolean editMode?: boolean
editData?: any editData?: any
// Suggestion support for batch import
suggestions?: WeaponSuggestions
dismissedSuggestions?: Set<string>
onAcceptSuggestion?: (field: string, value: any) => void
onDismissSuggestion?: (field: string) => void
// Callback when editData is modified (for triggering reactivity in parent) // Callback when editData is modified (for triggering reactivity in parent)
onDataChange?: () => void onDataChange?: () => void
} }
@ -27,10 +20,6 @@
weapon, weapon,
editMode = false, editMode = false,
editData = $bindable(), editData = $bindable(),
suggestions,
dismissedSuggestions,
onAcceptSuggestion,
onDismissSuggestion,
onDataChange onDataChange
}: Props = $props() }: Props = $props()
@ -116,29 +105,21 @@
{/if} {/if}
{#if editMode} {#if editMode}
<SuggestionDetailItem <DetailItem
label="FLB" label="FLB"
bind:value={editData.flb} bind:value={editData.flb}
editable={true} editable={true}
type="checkbox" type="checkbox"
element={elementName} element={elementName}
onchange={handleFlbChange} onchange={handleFlbChange}
suggestion={suggestions?.flb}
dismissedSuggestion={dismissedSuggestions?.has('flb')}
onAcceptSuggestion={() => onAcceptSuggestion?.('flb', suggestions?.flb)}
onDismissSuggestion={() => onDismissSuggestion?.('flb')}
/> />
<SuggestionDetailItem <DetailItem
label="ULB" label="ULB"
bind:value={editData.ulb} bind:value={editData.ulb}
editable={true} editable={true}
type="checkbox" type="checkbox"
element={elementName} element={elementName}
onchange={handleUlbChange} onchange={handleUlbChange}
suggestion={suggestions?.ulb}
dismissedSuggestion={dismissedSuggestions?.has('ulb')}
onAcceptSuggestion={() => onAcceptSuggestion?.('ulb', suggestions?.ulb)}
onDismissSuggestion={() => onDismissSuggestion?.('ulb')}
/> />
<DetailItem <DetailItem
label="Transcendence" label="Transcendence"