mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-11-13 17:08:20 +00:00
feat: change tool inplace
This commit is contained in:
@@ -2,6 +2,7 @@
|
||||
import AddStepButton from "./AddStepButton.svelte";
|
||||
import SchemaFields from "./SchemaFields.svelte";
|
||||
import SchemaPreview from "./SchemaPreview.svelte";
|
||||
import ToolPickerButton from "./ToolPickerButton.svelte";
|
||||
import StepCard from "$lib/components/display/StepCard.svelte";
|
||||
import { hasTransparency } from "$lib/core/analyze";
|
||||
import { debounce } from "$lib/core/debounce";
|
||||
@@ -23,6 +24,7 @@
|
||||
import { t } from "$lib/i18n/t";
|
||||
import {
|
||||
createChain,
|
||||
createStep,
|
||||
insertStep,
|
||||
loadChain,
|
||||
moveStep,
|
||||
@@ -246,6 +248,20 @@
|
||||
steps = steps.with(index, { ...step, collapsed: !step.collapsed });
|
||||
}
|
||||
|
||||
// Замена инструмента на месте: ключ и свёрнутость шага сохраняются,
|
||||
// параметры — дефолты нового инструмента, вход пересчитывается при прогоне.
|
||||
function replaceStepTool(index: number, toolId: string) {
|
||||
const step = steps[index];
|
||||
const next = createStep(toolId);
|
||||
if (!step || !next) return;
|
||||
touchedFor(step.key).clear();
|
||||
steps = steps.with(index, {
|
||||
...next,
|
||||
key: step.key,
|
||||
collapsed: step.collapsed,
|
||||
});
|
||||
}
|
||||
|
||||
function onStepDrop(e: DragEvent, to: number) {
|
||||
e.preventDefault();
|
||||
if (dragFrom !== null) steps = moveStep(steps, dragFrom, to);
|
||||
@@ -483,6 +499,13 @@
|
||||
ondrop={(e) => onStepDrop(e, i)}
|
||||
ondragend={() => (dragFrom = null)}
|
||||
>
|
||||
{#snippet tools()}
|
||||
<ToolPickerButton
|
||||
label={t("chain.changeTool")}
|
||||
iconOnly
|
||||
onadd={(id) => replaceStepTool(i, id)}
|
||||
/>
|
||||
{/snippet}
|
||||
<SchemaFields
|
||||
schema={toolSchemaOf(step)}
|
||||
values={step.params}
|
||||
|
||||
Reference in New Issue
Block a user