remove suggestion props from section components
This commit is contained in:
parent
2b22d539eb
commit
5b62a0b62e
14 changed files with 48 additions and 348 deletions
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
|
|
|
||||||
|
|
@ -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">
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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}
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
|
|
@ -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"
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue