From d86286ab1e956935f200f2ab65bb82811a7ab7bf Mon Sep 17 00:00:00 2001 From: Sean Sube Date: Thu, 14 Dec 2023 20:46:43 -0600 Subject: [PATCH] lint(gui): split up state types --- gui/src/state.ts | 172 +++------------------------------------ gui/src/state/blend.ts | 21 +++++ gui/src/state/default.ts | 12 +++ gui/src/state/history.ts | 18 ++++ gui/src/state/img2img.ts | 22 +++++ gui/src/state/inpaint.ts | 27 ++++++ gui/src/state/models.ts | 19 +++++ gui/src/state/profile.ts | 17 ++++ gui/src/state/reset.ts | 3 + gui/src/state/txt2img.ts | 24 ++++++ gui/src/state/types.ts | 11 +++ gui/src/state/upscale.ts | 21 +++++ 12 files changed, 207 insertions(+), 160 deletions(-) create mode 100644 gui/src/state/blend.ts create mode 100644 gui/src/state/default.ts create mode 100644 gui/src/state/history.ts create mode 100644 gui/src/state/img2img.ts create mode 100644 gui/src/state/inpaint.ts create mode 100644 gui/src/state/models.ts create mode 100644 gui/src/state/profile.ts create mode 100644 gui/src/state/reset.ts create mode 100644 gui/src/state/txt2img.ts create mode 100644 gui/src/state/types.ts create mode 100644 gui/src/state/upscale.ts diff --git a/gui/src/state.ts b/gui/src/state.ts index ad2a3e3a..fd9a21a0 100644 --- a/gui/src/state.ts +++ b/gui/src/state.ts @@ -2,7 +2,6 @@ /* eslint-disable max-lines */ /* eslint-disable no-null/no-null */ import { Maybe } from '@apextoaster/js-utils'; -import { PaletteMode } from '@mui/material'; import { Logger } from 'noicejs'; import { createContext } from 'react'; import { StateCreator, StoreApi } from 'zustand'; @@ -11,170 +10,24 @@ import { ApiClient, } from './client/base.js'; import { PipelineGrid } from './client/utils.js'; -import { Config, ConfigFiles, ConfigState, ServerParams } from './config.js'; -import { CorrectionModel, DiffusionModel, ExtraNetwork, ExtraSource, ExtrasFile, UpscalingModel } from './types/model.js'; -import { ImageResponse, ReadyResponse, RetryParams } from './types/api.js'; +import { Config, ServerParams } from './config.js'; import { BaseImgParams, - BlendParams, - BrushParams, HighresParams, - Img2ImgParams, - InpaintParams, ModelParams, - OutpaintPixels, - Txt2ImgParams, UpscaleParams, - UpscaleReqParams, } from './types/params.js'; - -export const MISSING_INDEX = -1; - -export type Theme = PaletteMode | ''; // tri-state, '' is unset - -/** - * Combine optional files and required ranges. - */ -export type TabState = ConfigFiles> & ConfigState>; - -export interface HistoryItem { - image: ImageResponse; - ready: Maybe; - retry: Maybe; -} - -export interface ProfileItem { - name: string; - params: BaseImgParams | Txt2ImgParams; - highres?: Maybe; - upscale?: Maybe; -} - -interface DefaultSlice { - defaults: TabState; - theme: Theme; - - setDefaults(param: Partial): void; - setTheme(theme: Theme): void; -} - -interface HistorySlice { - history: Array; - limit: number; - - pushHistory(image: ImageResponse, retry?: RetryParams): void; - removeHistory(image: ImageResponse): void; - setLimit(limit: number): void; - setReady(image: ImageResponse, ready: ReadyResponse): void; -} - -interface ModelSlice { - extras: ExtrasFile; - - removeCorrectionModel(model: CorrectionModel): void; - removeDiffusionModel(model: DiffusionModel): void; - removeExtraNetwork(model: ExtraNetwork): void; - removeExtraSource(model: ExtraSource): void; - removeUpscalingModel(model: UpscalingModel): void; - - setExtras(extras: Partial): void; - - setCorrectionModel(model: CorrectionModel): void; - setDiffusionModel(model: DiffusionModel): void; - setExtraNetwork(model: ExtraNetwork): void; - setExtraSource(model: ExtraSource): void; - setUpscalingModel(model: UpscalingModel): void; -} - -// #region tab slices -interface Txt2ImgSlice { - txt2img: TabState; - txt2imgModel: ModelParams; - txt2imgHighres: HighresParams; - txt2imgUpscale: UpscaleParams; - txt2imgVariable: PipelineGrid; - - resetTxt2Img(): void; - - setTxt2Img(params: Partial): void; - setTxt2ImgModel(params: Partial): void; - setTxt2ImgHighres(params: Partial): void; - setTxt2ImgUpscale(params: Partial): void; - setTxt2ImgVariable(params: Partial): void; -} - -interface Img2ImgSlice { - img2img: TabState; - img2imgModel: ModelParams; - img2imgHighres: HighresParams; - img2imgUpscale: UpscaleParams; - - resetImg2Img(): void; - - setImg2Img(params: Partial): void; - setImg2ImgModel(params: Partial): void; - setImg2ImgHighres(params: Partial): void; - setImg2ImgUpscale(params: Partial): void; -} - -interface InpaintSlice { - inpaint: TabState; - inpaintBrush: BrushParams; - inpaintModel: ModelParams; - inpaintHighres: HighresParams; - inpaintUpscale: UpscaleParams; - outpaint: OutpaintPixels; - - resetInpaint(): void; - - setInpaint(params: Partial): void; - setInpaintBrush(brush: Partial): void; - setInpaintModel(params: Partial): void; - setInpaintHighres(params: Partial): void; - setInpaintUpscale(params: Partial): void; - setOutpaint(pixels: Partial): void; -} - -interface UpscaleSlice { - upscale: TabState; - upscaleHighres: HighresParams; - upscaleModel: ModelParams; - upscaleUpscale: UpscaleParams; - - resetUpscale(): void; - - setUpscale(params: Partial): void; - setUpscaleHighres(params: Partial): void; - setUpscaleModel(params: Partial): void; - setUpscaleUpscale(params: Partial): void; -} - -interface BlendSlice { - blend: TabState; - blendBrush: BrushParams; - blendModel: ModelParams; - blendUpscale: UpscaleParams; - - resetBlend(): void; - - setBlend(blend: Partial): void; - setBlendBrush(brush: Partial): void; - setBlendModel(model: Partial): void; - setBlendUpscale(params: Partial): void; -} - -interface ResetSlice { - resetAll(): void; -} - -interface ProfileSlice { - profiles: Array; - - removeProfile(profileName: string): void; - - saveProfile(profile: ProfileItem): void; -} -// #endregion +import { DefaultSlice } from './state/default.js'; +import { HistorySlice } from './state/history.js'; +import { Img2ImgSlice } from './state/img2img.js'; +import { InpaintSlice } from './state/inpaint.js'; +import { ModelSlice } from './state/models.js'; +import { Txt2ImgSlice } from './state/txt2img.js'; +import { UpscaleSlice } from './state/upscale.js'; +import { ResetSlice } from './state/reset.js'; +import { ProfileItem, ProfileSlice } from './state/profile.js'; +import { BlendSlice } from './state/blend.js'; +import { MISSING_INDEX } from './state/types.js'; /** * Full merged state including all slices. @@ -189,7 +42,6 @@ export type OnnxState & UpscaleSlice & BlendSlice & ResetSlice - & ModelSlice & ProfileSlice; /** diff --git a/gui/src/state/blend.ts b/gui/src/state/blend.ts new file mode 100644 index 00000000..42d292f3 --- /dev/null +++ b/gui/src/state/blend.ts @@ -0,0 +1,21 @@ +import { + BlendParams, + BrushParams, + ModelParams, + UpscaleParams, +} from '../types/params.js'; +import { TabState } from './types.js'; + +export interface BlendSlice { + blend: TabState; + blendBrush: BrushParams; + blendModel: ModelParams; + blendUpscale: UpscaleParams; + + resetBlend(): void; + + setBlend(blend: Partial): void; + setBlendBrush(brush: Partial): void; + setBlendModel(model: Partial): void; + setBlendUpscale(params: Partial): void; +} diff --git a/gui/src/state/default.ts b/gui/src/state/default.ts new file mode 100644 index 00000000..b43b7ceb --- /dev/null +++ b/gui/src/state/default.ts @@ -0,0 +1,12 @@ +import { + BaseImgParams, +} from '../types/params.js'; +import { TabState, Theme } from './types.js'; + +export interface DefaultSlice { + defaults: TabState; + theme: Theme; + + setDefaults(param: Partial): void; + setTheme(theme: Theme): void; +} diff --git a/gui/src/state/history.ts b/gui/src/state/history.ts new file mode 100644 index 00000000..44f7b2f3 --- /dev/null +++ b/gui/src/state/history.ts @@ -0,0 +1,18 @@ +import { Maybe } from '@apextoaster/js-utils'; +import { ImageResponse, ReadyResponse, RetryParams } from '../types/api.js'; + +export interface HistoryItem { + image: ImageResponse; + ready: Maybe; + retry: Maybe; +} + +export interface HistorySlice { + history: Array; + limit: number; + + pushHistory(image: ImageResponse, retry?: RetryParams): void; + removeHistory(image: ImageResponse): void; + setLimit(limit: number): void; + setReady(image: ImageResponse, ready: ReadyResponse): void; +} diff --git a/gui/src/state/img2img.ts b/gui/src/state/img2img.ts new file mode 100644 index 00000000..cbe204d1 --- /dev/null +++ b/gui/src/state/img2img.ts @@ -0,0 +1,22 @@ + +import { + HighresParams, + Img2ImgParams, + ModelParams, + UpscaleParams, +} from '../types/params.js'; +import { TabState } from './types.js'; + +export interface Img2ImgSlice { + img2img: TabState; + img2imgModel: ModelParams; + img2imgHighres: HighresParams; + img2imgUpscale: UpscaleParams; + + resetImg2Img(): void; + + setImg2Img(params: Partial): void; + setImg2ImgModel(params: Partial): void; + setImg2ImgHighres(params: Partial): void; + setImg2ImgUpscale(params: Partial): void; +} diff --git a/gui/src/state/inpaint.ts b/gui/src/state/inpaint.ts new file mode 100644 index 00000000..12756ac2 --- /dev/null +++ b/gui/src/state/inpaint.ts @@ -0,0 +1,27 @@ +import { + BrushParams, + HighresParams, + InpaintParams, + ModelParams, + OutpaintPixels, + UpscaleParams, +} from '../types/params.js'; +import { TabState } from './types.js'; + +export interface InpaintSlice { + inpaint: TabState; + inpaintBrush: BrushParams; + inpaintModel: ModelParams; + inpaintHighres: HighresParams; + inpaintUpscale: UpscaleParams; + outpaint: OutpaintPixels; + + resetInpaint(): void; + + setInpaint(params: Partial): void; + setInpaintBrush(brush: Partial): void; + setInpaintModel(params: Partial): void; + setInpaintHighres(params: Partial): void; + setInpaintUpscale(params: Partial): void; + setOutpaint(pixels: Partial): void; +} diff --git a/gui/src/state/models.ts b/gui/src/state/models.ts new file mode 100644 index 00000000..e0faa27d --- /dev/null +++ b/gui/src/state/models.ts @@ -0,0 +1,19 @@ +import { CorrectionModel, DiffusionModel, ExtraNetwork, ExtraSource, ExtrasFile, UpscalingModel } from '../types/model.js'; + +export interface ModelSlice { + extras: ExtrasFile; + + removeCorrectionModel(model: CorrectionModel): void; + removeDiffusionModel(model: DiffusionModel): void; + removeExtraNetwork(model: ExtraNetwork): void; + removeExtraSource(model: ExtraSource): void; + removeUpscalingModel(model: UpscalingModel): void; + + setExtras(extras: Partial): void; + + setCorrectionModel(model: CorrectionModel): void; + setDiffusionModel(model: DiffusionModel): void; + setExtraNetwork(model: ExtraNetwork): void; + setExtraSource(model: ExtraSource): void; + setUpscalingModel(model: UpscalingModel): void; +} diff --git a/gui/src/state/profile.ts b/gui/src/state/profile.ts new file mode 100644 index 00000000..7ffdfac9 --- /dev/null +++ b/gui/src/state/profile.ts @@ -0,0 +1,17 @@ +import { Maybe } from '@apextoaster/js-utils'; +import { BaseImgParams, HighresParams, Txt2ImgParams, UpscaleParams } from '../types/params.js'; + +export interface ProfileItem { + name: string; + params: BaseImgParams | Txt2ImgParams; + highres?: Maybe; + upscale?: Maybe; +} + +export interface ProfileSlice { + profiles: Array; + + removeProfile(profileName: string): void; + + saveProfile(profile: ProfileItem): void; +} diff --git a/gui/src/state/reset.ts b/gui/src/state/reset.ts new file mode 100644 index 00000000..66b545a5 --- /dev/null +++ b/gui/src/state/reset.ts @@ -0,0 +1,3 @@ +export interface ResetSlice { + resetAll(): void; +} diff --git a/gui/src/state/txt2img.ts b/gui/src/state/txt2img.ts new file mode 100644 index 00000000..d8cd95eb --- /dev/null +++ b/gui/src/state/txt2img.ts @@ -0,0 +1,24 @@ +import { PipelineGrid } from '../client/utils.js'; +import { + HighresParams, + ModelParams, + Txt2ImgParams, + UpscaleParams, +} from '../types/params.js'; +import { TabState } from './types.js'; + +export interface Txt2ImgSlice { + txt2img: TabState; + txt2imgModel: ModelParams; + txt2imgHighres: HighresParams; + txt2imgUpscale: UpscaleParams; + txt2imgVariable: PipelineGrid; + + resetTxt2Img(): void; + + setTxt2Img(params: Partial): void; + setTxt2ImgModel(params: Partial): void; + setTxt2ImgHighres(params: Partial): void; + setTxt2ImgUpscale(params: Partial): void; + setTxt2ImgVariable(params: Partial): void; +} diff --git a/gui/src/state/types.ts b/gui/src/state/types.ts new file mode 100644 index 00000000..98843c86 --- /dev/null +++ b/gui/src/state/types.ts @@ -0,0 +1,11 @@ +import { PaletteMode } from '@mui/material'; +import { ConfigFiles, ConfigState } from '../config.js'; + +export const MISSING_INDEX = -1; + +export type Theme = PaletteMode | ''; // tri-state, '' is unset + +/** + * Combine optional files and required ranges. + */ +export type TabState = ConfigFiles> & ConfigState>; diff --git a/gui/src/state/upscale.ts b/gui/src/state/upscale.ts new file mode 100644 index 00000000..af0a344a --- /dev/null +++ b/gui/src/state/upscale.ts @@ -0,0 +1,21 @@ +import { + HighresParams, + ModelParams, + UpscaleParams, + UpscaleReqParams, +} from '../types/params.js'; +import { TabState } from './types.js'; + +export interface UpscaleSlice { + upscale: TabState; + upscaleHighres: HighresParams; + upscaleModel: ModelParams; + upscaleUpscale: UpscaleParams; + + resetUpscale(): void; + + setUpscale(params: Partial): void; + setUpscaleHighres(params: Partial): void; + setUpscaleModel(params: Partial): void; + setUpscaleUpscale(params: Partial): void; +}