Skip to main content

Documentation Index

Fetch the complete documentation index at: https://tech.illasoft.com/llms.txt

Use this file to discover all available pages before exploring further.

概述

所有编辑工具使用统一的 Selector 模式,确保一致的用户体验。

接口定义

每个 Selector 有自己独立的 props 接口,没有统一的 SelectorProps。以下是几个实际示例:
// UpscaleSelector props
interface UpscaleSelectorProps {
  threadId: string;
  image: Image;
  onClose: () => void;
}

// EraserSelector props
interface EraserSelectorProps {
  threadId: string;
  image: Image;
  getMaskImage: (imageWidth: number, imageHeight: number) => Promise<string | null>;
  onClose: () => void;
  onPaintSizeChange: (size: number) => void;
  onBackward: () => void;
  canBackward: boolean;
}

组件结构

每个 Selector 组件拥有自己的 props 接口和内部逻辑,但通常遵循类似的模式:
export function FilterSelector({ threadId, image, onClose }: FilterSelectorProps) {
  // 1. 本地状态
  const [selectedFilter, setSelectedFilter] = useState<Filter | null>(null);
  const [isProcessing, setIsProcessing] = useState(false);

  // 2. 确认处理
  const handleConfirm = async () => {
    setIsProcessing(true);
    // 调用 API
    await applyFilter({ imageId: image.id, filterId: selectedFilter.id });
    onClose();
  };

  // 3. 渲染 UI
  return (
    <div>
      {/* 选择界面 */}
    </div>
  );
}

Selector 列表

Selector文件对应 EditMode
FilterSelectorcommon/generator/filter-selector.tsxfilter
ChooseFilterSelectorcommon/generator/choose-filter-selector.tsxchooseFilter
UpscaleSelectorcommon/generator/upscale-selector.tsxupscale
EraserSelectorcommon/generator/eraser-selector.tsxeraser
InpaintSelectorcommon/generator/inpaint-selector.tsxinpaint
InpaintFromUserSelectorcommon/generator/inpaint-from-user-selector.tsxinpaint(variant)
ExpandSelectorcommon/generator/expand-selector.tsxexpand
ReplaceBgSelectorcommon/generator/replacebg-selector.tsxreplaceBg
GenerateImageSelectorcommon/generator/generate-image-selector.tsxgenerateImage
VideoSelectorcommon/generator/video-selector.tsxgenerateVideo
VideoTrimSelectorcommon/generator/video-trim-selector.tsxtrimVideo
VideoEditSelectorcommon/generator/video-edit-selector.tsxvideoEdit
VideoExtendSelectorcommon/generator/video-extend-selector.tsxvideoExtend
MotionControlSelectorcommon/generator/motion-control-selector.tsxmotionControl
MusicSelectorcommon/generator/music-selector.tsxgenerateMusic
InstrumentalSelectorcommon/generator/instrumental-selector.tsxgenerateInstrumental
AddVocalsSelectorcommon/generator/add-vocals-selector.tsxaddVocals
AudioTrimSelectorcommon/generator/audio-trim-selector.tsxtrimAudio
MediaSelectorcommon/generator/media-selector.tsx— (不改 mode,切换当前媒体)
加粗的是 2026-03+ 新增的 5 个视频/音频编辑 Selector。 渲染位置:统一在 components/feature/common/generator/generator-thread-layout.tsx,根据 getEditMode(threadId) 动态渲染。
导出功能不是 Selector,而是位于 tool/export.tsx

平台特定变体

功能PC 版移动端版
调整pc/generator/pc-adjust-selector.tsxmobile/generator/mobile-adjust-selector.tsx
裁剪pc/generator/pc-crop-selector.tsxmobile/generator/mobile-crop-selector.tsx
其余 Selector 均为 common(PC/Mobile 共享实现,内部响应式)。

最佳实践

  1. 所有用户确认操作必须埋点
  2. 处理中状态要有 loading 反馈
  3. 每个 Selector 定义自己的 props 接口,不使用统一接口